Localizar arquivo baseado no conteúdo do arquivo inteiro, não por linha

1

Posso procurar arquivos com um rexexp que seja comparado com o arquivo inteiro? Digamos que eu tenha esses arquivos:

//file1
foo
bar

//file2
bar
foo

Eu quero encontrar arquivos que terminem com "foo". Se eu usar grep e o regex foo$ que corresponderá a ambos os arquivos, pois ambos têm linhas que terminam com "foo". Mas eu só quero corresponder ao segundo, já que é o único caso em que o arquivo inteiro termina com "foo".

    
por Ludwig Magnusson 24.02.2016 / 09:52

2 respostas

1

Você pode usar uma combinação de tail e grep , por exemplo,

find . -type f -exec sh -c 'tail -n1 "" | grep -q "foo"' sh {} \; -print
    
por steeldriver 24.02.2016 / 10:13
0

No perl, a opção 0 pode ser usada para processar o arquivo como registro único.

Desta forma, tente:

perl -n0E  'say $ARGV if /foo\s*$/' file*

\s* é útil para lidar com novas linhas e similares, normalmente presentes no final do arquivo.

Outra alternativa similar (gnugrep)

grep -lzP 'foo\Z' file*
    
por JJoao 14.07.2016 / 18:13