egrep
(ou grep -E
) pode fazer OR:
egrep "string|string|string" <file>
O script que eu recebo recebe argumentos e precisa passar por outro arquivo. Script faz um loop em cada argumento.
Existe uma maneira de coletar os argumentos em uma única string de pesquisa e grep com OR? Eu gostaria de fazer isso para melhorar a velocidade na esperança de que pesquisar tudo de uma vez torne meu script mais rápido. Aprecie todas as ideias.
grep -e foo -e bar -e baz files
ou:
grep 'foo
bar
baz' files
Se os foo
, bar
, baz
forem strings em oposição a expressões regulares básicas, adicione a opção -F
aos comandos 2 grep
acima.
Para expressões regulares estendidas:
grep -E 'foo|bar|baz' files
Se a lista de strings estiver nos parâmetros posicionais ( $1
, $2
...):
NL='
'
IFS=$NL # or IFS=$'\n' with ksh93/zsh/bash/mksh/FreeBSD sh...
grep -Fe "$*" files
( $*
é a concatenação dos parâmetros posicionais com o primeiro caractere de $IFS
)
Uma alternativa seria usar ack que suporta regex estendido por padrão:
ack "one|two"
Para insensibilidade a maiúsculas e minúsculas use ack -i
e para tipos de arquivos não padrão use ack --all
.
Tags performance grep