Primeiro, você precisa proteger o padrão da expansão pelo shell. A maneira mais fácil de fazer isso é colocar aspas simples em torno dele. Aspas simples impedem a expansão de qualquer coisa entre elas (incluindo barras invertidas); a única coisa que você não pode fazer é ter aspas simples no padrão.
grep 'foo*' *.txt
Se você precisar de uma aspa simples, poderá escrevê-la como '\''
(string literal, literal, literal de string aberta).
grep 'foo*'\''bar' *.txt
Em segundo lugar, o grep suporta duas sintaxes para padrões. A antiga sintaxe padrão ( expressões regulares básicas ) não suporta o operador de alternância ( |
), embora Algumas versões têm isso como uma extensão, mas escritas com uma barra invertida.
grep 'foo\|bar' *.txt
O modo portátil é usar a nova sintaxe, expressões regulares estendidas . Você precisa passar a opção -E
para grep
para selecioná-la. No Linux, você também pode digitar egrep
em vez de grep -E
(em outros unices, você pode torná-lo um alias).
grep -E 'foo|bar' *.txt
Outra possibilidade, quando você está apenas procurando por vários padrões (ao invés de construir um padrão complexo usando disjunção) é passar múltiplos padrões para grep
. Você pode fazer isso precedendo cada padrão com a opção -e
.
grep -e foo -e bar *.txt