Use .* :
grep "${word1}.*${word2}" "$filename"
-
.corresponde a qualquer caractere -
*corresponde a qualquer número do caractere anterior
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)?
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.
Tags grep shell-script