grep Ausgabe weiterverarbeiten

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
synapsenstau
Beiträge: 171
Registriert: 08.10.2013 09:56:34
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Südharz

grep Ausgabe weiterverarbeiten

Beitrag von synapsenstau » 05.03.2015 20:07:50

Moinsen,

ich will in meinen Musik Verzeichniss ein wenig Ordnung/übersicht bringen (scriptgesteuert). Jede CD ist in einem eigenem Verzeichniss gespeichert, welche eine *.nfo Datei enthält. Die nfo's sind einfache Text Dateien, welche nach gewissen "standarts" aufgebaut sind, aber weit weg von einer DIN sind. Letztendlich soll in jedes Verzeichniss eine Datei erstellt werden, die im Dateinahmen u.a das Genre enthält. Mit

Code: Alles auswählen

grep Genre irgendeine.nfo
kriege ich schon mal die richtige Zeile aus der nfo.

Jetzt zu dem eigentlichen Problem:
Ich habe zur Verdeutlichung des ganzem dem "grep" mal ein "find /musik/ -exec ...." vorangestellt und diese Ausgabe erhalten:
Auszug der Liste, jede Zeile ein nfo Ergebnis

Code: Alles auswählen

        Genre       : Psychedelic
 Genre......: Psychedelic                                                      
 Ûßßßßßßßßßßßßßßßßß  Û  ÛÛ  °°º :.:Genre: Psychedelic                                            º°  ÛÛ²  Û  ßßßßßßßßßßßßßßßßßßßßÛ
        Genre       : Psychedelic
º      Genre.........:Psychedelic                            º
 Ûßßßßßßßßßßßßßßßßß  Û  ÛÛ  °°º :.:Genre: Psychedelic                                            º°  ÛÛ²  Û  ßßßßßßßßßßßßßßßßßßßßÛ
        Genre       : Psychedelic
        Genre       : Psychedelic
 Ûßßßßßßßßßßßßßßßßß  Û  ÛÛ  °°º :.:Genre: Psychedelic                                            º°  ÛÛ²  Û  ßßßßßßßßßßßßßßßßßßßßÛ
 °   ÜÛ²²ßß         Genre.......: Electronic                         ßÛ²²ÛÛÜ  °°
  ° Ü ²ÛÛÛÛÛÛÛÛܲÜÛ   Genre ........ Ambient                Û   ÛÛÛÛÛÜÛÛ² Ü
Wie schaffe ich es nun das die Angabe des Genres in eine Variable kriege, da ja Formatierung immer anders ist. Mal fangen die Zeilen mit Ascii Art an, mal nicht. Mal ist ein Doppelpunkt hinter Genre, mal nicht und und und.

Hat jemand eine Idee, wie ich Ambient, Electronic und co in eine Variable kriege um sie weiterzuverarbeiten zu können?

Ich danke für eure mühen schon mal im voraus....
..::: Intel® Core™ i5-6600 :::..::: 16 GB Ram :::..
..::: 1 TB Nvme :::..::: 1 TB SSD :::..::: NVIDIA GeForce GTX 1070 :::.

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: grep Ausgabe weiterverarbeiten

Beitrag von Liffi » 05.03.2015 20:32:42

Würde das ganze durch Perl pipen (geht natürlich auch mit sed oder awk) und auf "Genre.* \w+ " matchen. Also das Leerzeichen vor und nach dem eigentlichen Genre mit einschließen.

Benutzeravatar
Phineas
Beiträge: 354
Registriert: 20.06.2012 20:26:19

Re: grep Ausgabe weiterverarbeiten

Beitrag von Phineas » 05.03.2015 23:15:14

Auf die Schnelle:

Code: Alles auswählen

grep -Eo 'Genre[.: ]*\w*\>' irgendeine.nfo | grep -o '\w*$'
Ach ja, die Variable:

Code: Alles auswählen

var=$(grep -Eo 'Genre[.: ]*\w*\>' irgendeine.nfo | grep -o '\w*$')

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: grep Ausgabe weiterverarbeiten

Beitrag von rendegast » 06.03.2015 00:37:40

Was zumindest bei Deinem Beispiel funktioniert

Code: Alles auswählen

$ egrep -io "genre.*" test | strings | sed 's@:@ @;s@[^[:alnum:] \t]@@g'
Genre         Psychedelic
Genre  Psychedelic                                                     
Genre  Psychedelic                                            
Genre         Psychedelic
Genre Psychedelic                            
Genre  Psychedelic                                            
Genre         Psychedelic
Genre         Psychedelic
Genre  Psychedelic                                            
Genre  Electronic                         
Genre  Ambient                
Dann weiter

Code: Alles auswählen

... | awk '{print $2}'
gäbe den Genre-Wert.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
synapsenstau
Beiträge: 171
Registriert: 08.10.2013 09:56:34
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Südharz

Re: grep Ausgabe weiterverarbeiten

Beitrag von synapsenstau » 07.03.2015 11:11:22

Ich danke euch für die Lösungsvorschläge, speziell die von rendergast und Phineas sehen vielversprechend aus, aber (und jetzt geht es ein wenig OT weiter) hier haben sich nach dem Post die Ereignisse "überschlagen":
Liffi hat geschrieben:Würde das ganze durch Perl pipen (geht natürlich auch mit sed oder awk) und auf "Genre.* \w+ " matchen. Also das Leerzeichen vor und nach dem eigentlichen Genre mit einschließen.
Puhhh, Perl dachte ich vorgestern abend. Damit habe ich noch nie was gemacht. Habe mir im Netz dann ein paar Perl vs. Pythen seiten angeschaut. Dort wurde ich mehrfach auf Asciizeichen "liebe" von Perl hingeweisen und die Verwendung von anderslautenden Befehlen (im Vergleich anderen Scriptsprachen). Außerdem habe ich vor ein paar Jahren mal während eines mehrwöchigen Krankenhausaufenthalt aus langeweile mal ein Python 2.x Buch gelesen, aber nie was damit gemacht. Desweiteren sprach ich mit nem Freund über mein Vorhaben und dieser Windowsuser fand die Idee auch nett mit den Dateinamen in den Mp3-Foldern (das Genre wäre ja nur ein Teil des vorhabens gewesen.....geht in Richtung was IoNinja oder zipscript bei Ftp's machen, Foldercheck) und er wäre auch daran interesiert. Also muss eine Lösung her, die man auch auf WinSysteme portieren kann. Außerdem habe ich auf einer anderen Seite gelesen, das wenn zu erwarten ist, das ein Shell Script mehr als 30-50 Zeilen groß wird man sich überlegen sollte ob eine andere Interpreter Sprache nicht besser geeignt ist.
Lese jetzt gerade ein Python Tutorial [1] und werde mich wohl daran versuchen.

Ich werde wohl eure repexp hinweise später in meinem Script verwenden und testen.


[1] py-tutorial-de.readthedocs.org
..::: Intel® Core™ i5-6600 :::..::: 16 GB Ram :::..
..::: 1 TB Nvme :::..::: 1 TB SSD :::..::: NVIDIA GeForce GTX 1070 :::.

Antworten