Procura por string (s) em arquivos e reporta quatro linhas de contexto (match e tres seguintes)

0

Eu tenho uma string (ou uma lista de strings) que é / deve ser pesquisada em todos os arquivos de um diretório. Por exemplo, se eu estiver pesquisando ABC e file1.txt contiver ABC na linha 6, quero as linhas 6, 7, 8 e 9 desse arquivo. Eu quero que toda essa saída vá para um novo arquivo de saída.

    
por Praveen Kashekar 19.07.2015 / 18:30

3 respostas

3

Talvez isso sirva. Faz uso da opção grep -A (after-context), para produzir a linha correspondente e as 3 linhas subsequentes.

find . -name file\* -exec grep -A 3 ABC {} \; > result-filename

NOTA: você não deve colocar result-filename em directoryname . (Veja: grep: arquivo de entrada 'X' também é a saída ).

Para cobrir vários padrões:

find . -name file\* -exec egrep -A 3 'ABC|XYZ' {} \; > result-filename

Ou vários padrões de um arquivo (obrigado Evgeny Vereshchagin):

find . -name file\* -exec grep -A 3 -f patterns.txt {} \; > result-filename
    
por 19.07.2015 / 19:16
1

O seguinte irá procurar todos os arquivos não pontuais no diretório atual:

sed '/string/{
        $!N;$!N;$!N;$!N
        w ./new_out_file
     }' ./*

Para fazer várias correspondências -F ixed- string com grep -A w / o find e sem os nomes de arquivos adicionados a cada correspondência, você precisa primeiro de um único fluxo .

cat ./* | grep -A2 -Ff pattern_file >outfile
    
por 19.07.2015 / 18:35
-1

Eu tenho solução para isso:

grep -A 2 -f 'INPUT.txt' *.* >> RESULT.txt
    
por 21.07.2015 / 19:08