O comando grep
não tem um operador AND adequado, portanto você precisa ser criativo ao tentar resolver problemas como este. Você pode fazer, como você escolheu fazer e encadear vários grep
juntos. Mas você também pode fazer algo assim:
$ echo -e "arie\narin" | grep -i '[arn].*[arn].*[arn]'
arin
Isso corresponderá a qualquer sequência que contenha uma combinação de a, r ou n e deverá conter três ocorrências de caracteres desse conjunto.
Palavras com espaços
Para lidar com espaços, você pode adaptar o regex acima da seguinte forma:
$ echo -e "arie\narin\nar nie" | \
grep -i '[arn][[:alpha:]]*[arn][[:alpha:]]*[arn]'
arin
Aqui, em vez de aceitar qualquer tipo de caractere entre os blocos [arn]
, estamos sendo mais seletivos, pegando apenas caracteres do [[:alpha:]]
set. Também estamos dizendo grep
que queremos *
, ou seja, zero ou mais desses caracteres no meio.