grep с фильтром grep, как?

grep с фильтром grep, как?

Мне нужно только имя Zip-файла. На первом этапе я искал автора:

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

что бы ни сработало, результат был таким:

zip: /var/www/dir_de/html/dir1/dir2/7890971.zip
автор: test_autor
zip: /var/www/dir_de/html/dir1/dir2/10567581.zip
автор: test_autor

Но, как уже упоминалось выше, имя файла Ziip. На втором этапе я попытался снова отфильтровать результат первого поиска:

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

для поиска только по имени файла, к сожалению, это не работает.

Мой вопрос. Как должен «выглядеть» второй фильтр grep, чтобы я получил только имя zip-файла?

решение1

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

Измените первый grepпо мере необходимости. Второй grepотфильтровывает части в конце строки, содержащие не- /символы, за которыми следует .zipсуффикс.

Если вы знаете, что ваши zip-файлы содержат только цифры, вы можете выполнить обмен [^/]с [[:digit:]].

решение2

С однимawkвыражение:

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

Связанный контент