grep para uma palavra, mas também mencionar outra (s) palavra (s) que deve aparecer no arquivo

1

Estou procurando por ocorrências da palavra 'image' em uma pasta com muitos arquivos e subpastas.

Os comandos regulares do grep (grep e 'git grep') retornam mais de mil correspondências. Como posso adicionar algo ao comando grep, para dizer,

"Encontre-me arquivos que contenham a 'palavra', mas somente se as palavras 'reporter' ou 'publisher' forem mencionadas no mesmo arquivo

    
por american-ninja-warrior 06.09.2017 / 16:40

2 respostas

1

Os seguintes itens devem funcionar:

grep word 'grep -E -l 'reporter|publisher''

O comando grep em backquotes gerará uma lista de arquivos que contenham 'reporter' ou 'publisher' ( -l avisa ao grep para listar os arquivos que correspondem ao invés da saída usual, -E é necessário para assegure-se de que a alternação | funcione), que são listados como argumentos para o comando grep externo, que por sua vez pesquisa por 'word' (você pode adicionar -l a isso também se desejar apenas uma lista de arquivos partida). Note que isso não é tão eficiente quanto escrever as coisas como uma única expressão regular (ele procura mais vezes do que absolutamente nessecary), mas geralmente é mais facilmente explicado do que colocá-lo como um único regex.

    
por 06.09.2017 / 17:00
0

Primeiro, crie uma lista de arquivos que tenham reporter|publisher e, em seguida, use essa lista como a origem para os arquivos que você deseja pesquisar por word .

Se você estiver usando ack , poderá fazer isso:

ack -l 'reporter|publisher' | ack -x word

em que -x informa a segunda invocação de ack para usar a lista de arquivos em stdin como a lista de arquivos a pesquisar.

    
por 07.09.2017 / 16:18

Tags