grep con filter grep, ¿cómo?

grep con filter grep, ¿cómo?

Todo lo que necesito es el nombre del archivo Zip. En el primer paso busqué el autor:

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

Lo que sea que funcionó, el resultado fue:

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

Pero, como se mencionó anteriormente, el nombre del archivo Ziip. En el segundo paso intenté filtrar nuevamente el resultado de la primera búsqueda:

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

para buscar sólo el nombre del archivo, lamentablemente esto no funciona.

Mi pregunta. ¿Cómo debería "verse" el segundo filtro grep para que solo obtenga el nombre del archivo zip?

Respuesta1

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

Cambie el primero grepsegún sea necesario. El segundo grepfiltra las partes al final de la línea que contienen no /caracteres seguidos del .zipsufijo.

Si sabe que sus archivos zip solo contienen dígitos, puede intercambiarlos [^/]con [[:digit:]].

Respuesta2

con solteroawkexpresión:

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

información relacionada