grep mit Filter grep, wie?

grep mit Filter grep, wie?

Ich brauche nur den Namen der Zip-Datei. Im ersten Schritt habe ich nach dem Autor gesucht:

egrep -ni -B1 --color "$autor: test_autor" file_search_v1.log > result1.log

was auch immer funktionierte, das Ergebnis war:

zip: /var/www/dir_de/html/dir1/dir2/7890971.zip
Autor: test_autor
zip: /var/www/dir_de/html/dir1/dir2/10567581.zip
Autor: test_autor

Aber wie oben erwähnt, der Ziip-Dateiname. Im zweiten Schritt habe ich versucht, das Ergebnis der ersten Suche noch einmal zu filtern:

egrep -ni -B1 --color "$autor: test_autor" file_search_v1.log | xargs grep -i -o "\/[[:digit:]]]\.zip"

nur nach dem Dateinamen zu suchen, funktioniert dies leider nicht.

Meine Frage. Wie sollte der zweite Grep-Filter „aussehen“, damit ich nur den Zip-Dateinamen erhalte?

Antwort1

grep -B1 "$autor: test_autor" file_search_v1.log | grep -o "[^/]*\.zip$"

Ändern Sie den ersten grepnach Bedarf. Der zweite grepfiltert die Teile am Ende der Zeile heraus, die Nicht- /Zeichen gefolgt vom .zipSuffix enthalten.

Wenn Sie wissen, dass Ihre ZIP-Dateien nur Ziffern enthalten, können Sie sie [^/]durch ersetzen [[:digit:]].

Antwort2

Mit EinzelawkAusdruck:

$ author="test_autor"
$ awk -v pat="author: $author" '$0 ~ pat{ sub(/^.*\//, "", zip); print zip }{ zip=$0 }' file
7890971.zip
10567581.zip

verwandte Informationen