Procura por dois padrões sequenciais com qualquer número de caracteres usando grep [duplicate]

0

Eu quero procurar por linhas com "word1 ... word2", em que '...' poderia ser qualquer caractere diferente. Até agora eu usei dois greps para o mesmo assim:

grep "$word1" $filename | grep "$word2"

Existe uma maneira mais rápida de fazer isso supondo algo assim:

grep "$word1*$word2" $filename

onde talvez * poderia ser algum caracter especial que pode ser qualquer outro caractere (s)?

    
por Pratik Mayekar 21.06.2018 / 13:39

2 respostas

2

Use .* :

grep "${word1}.*${word2}" "$filename"
  • . corresponde a qualquer caractere
  • * corresponde a qualquer número do caractere anterior
por 21.06.2018 / 13:43
0

Se você precisar que as duas palavras sejam delimitadas , ou seja, se você não quiser corresponder abba se uma das palavras for bb , use

grep "\<$word1\>.*\<$word2\>" "$filename"

O padrão \< (aqui \< para escapar da primeira barra invertida do shell) corresponde logo antes de uma palavra, e \> funciona de maneira semelhante, mas logo após uma palavra.

Há alo \b que corresponde a antes e depois e [[:<:]] e [[:>:]] que funcionam como \< e \> . Quais são implementados por grep varia.

    
por 21.06.2018 / 14:03