Grep de uma só vez

4

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.

    
por user2980702 04.08.2015 / 20:18

3 respostas

3

egrep (ou grep -E ) pode fazer OR:

egrep "string|string|string" <file>
    
por 04.08.2015 / 20:22
5
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 )

    
por 04.08.2015 / 21:48
0

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 .

    
por 05.08.2015 / 04:11