A resposta mais simples é usar scope.txt
, muito ligeiramente modificado, como patternfile, e usar zcat | grep
(ou apenas zgrep
) para obter as linhas necessárias.
Primeiro, modifique o arquivo scope
para alterar:
/^10\.0\.0\.([8-9]|[1-3][0-9]|4[0-5])$/
para:
(^|[^0-9.])(10\.0\.0\.([8-9]|[1-3][0-9]|4[0-5]))($|[^0-9.])
Para fazer isso facilmente, você pode usar:
sed -e 's:^/\^:(^|[^0-9.])(:' -e 's:\$/$:)($|[^0-9.]):' scope.txt > grepscope.txt
Em seguida, faça sua pesquisa:
zgrep -Ehf grepscope.txt /data/bro_logs/2016-11-26/conn.*.log.gz | less
Ou, desde que você queira a saída de cada arquivo armazenado separadamente:
for f in /data/bro_logs/2016-11-26/conn.*.log.gz; do
zgrep -Ehf grepscope.txt "$f" | sort -u > ~/"${f##*/}"
done
Note também que a variável de loop "for" $f
conterá o caminho inteiro para cada arquivo por vez; para evitar os erros que obteríamos se tentássemos direcionar a saída para ~/"$f"
(o que se referiria aos subdiretórios ~/data/bro_logs/2016-11-26
que provavelmente não existem em seu diretório home), removemos tudo até a barra final no nome do caminho e apenas use o nome base de cada arquivo de log.
Os sinalizadores para zgrep
devem ser mencionados:
-E
especifica a regex estendida, para que os parênteses em seus padrões não precisem ser escapados.
-h
suprime a impressão do nome do arquivo como um prefixo para cada linha correspondente. (Você pode omitir isso na versão for
do loop, já que por padrão grep
apenas imprime o nome do arquivo ao pesquisar mais de um arquivo, como no primeiro comando que eu especifiquei - mas não atrapalha nada mantê-lo em ambos versões.)
-f
permite que você especifique um patternfile. Isso é exatamente o que você precisa, de acordo com sua pergunta, e usar grep -f
permite usar vários padrões de pesquisa de um arquivo, sem construindo um comando Awk com um grande número de "ou" s.
sort | uniq
geralmente pode ser substituído por sort -u
, a menos que você precise usar alguns dos sinalizadores de opção uniq
. Neste caso você não, então eu usei o formulário mais simples sort -u
.