Pesquisar uma String em um diretório - Obter saída sem nome de arquivo

3

Estou executando o comando abaixo para exibir as linhas que correspondem ao padrão.

find ./files/ -name "*.txt" -print0 | xargs -0 grep "5|20150507"

E a saída é

./ files / N1.942_0000.txt: 78787878 | 13 | 5 | 20150507221152 ./files/N1.942_0000.txt:78787878|13|5|20150507221156 ./files/N1.943_0002.txt:1221212|13|5|20150507222004 ./files/N1.810_0000.txt:8892716618|13|5|20150507215150 ./files/N1.442_0001.txt:8648648648|13|5|20150507221636 ./files/N1.442_0001.txt:8648648648|13|5|20150507221638 ./files/N1.442_0001.txt:7406079160|13|5|20150507221941

Mas eu quero saída sem nome de arquivo como abaixo.

78787878 | 13 | 5 | 20150507221152
78787878 | 13 | 5 | 20150507221156
1221212 | 13 | 5 | 20150507222004
8892716618 | 13 | 5 | 20150507215150
8648648648 | 13 | 5 | 20150507221636
8648648648 | 13 | 5 | 20150507221638
7406079160 | 13 | 5 | 20150507221941

    
por Albin 08.05.2015 / 16:05

3 respostas

1

Use o grep com a opção "-h".

 -h, --no-filename
             Suppress  the  prefixing  of file names on output.  This is    
  the default when there is only one file (or only standard input) to
          search.

find ./files/ -name "*.txt" -print0 | xargs -0 grep -h "5|20150507"

    
por 08.05.2015 / 18:32
2
O comando

grep tem -r opção

ele procura texto recursivo pelo diretório

exemplo abaixo:

grep -r "5|20150507" ./ | awk -F ':' {'print $2'}
    
por 08.05.2015 / 16:32
0
find ./files/ -name "*.txt" -print0 | xargs -0 grep "5|20150507" | awk 'BEGIN{FS=":"} {print $2}'

Você pode ter que jogar com o delimitador "FS=", pois pode ser um caractere especial.

    
por 08.05.2015 / 16:14