Grep para string, mas ignora itens comentados com string

0

Estou procurando as palavras gmail ou outlook em um diretório. Embora existam algumas linhas comentadas com a palavra gmail e outlook nela. Como posso grep para isso?

Eu tentei um monte de coisas, mas imagino que será algo parecido com:

grep "^[^#;]" | egrep -i "gmail|outlook" *.ksh  > a.log
    
por Schwimms 25.09.2015 / 06:25

3 respostas

3

com grep :

grep -P '^(?=[\s]*+[^#])[^#]*(gmail|outlook)' file
  • -P ativa expressões regulares compatíveis com Perl.
  • ^(?=...) define um grupo de captura que não faz parte do padrão (lookahead; uma extensão Perl). O ^ significa o início da linha.
    • Dentro desse grupo \s corresponde a qualquer caractere de espaço em branco, *+ corresponde ao espaço em branco 0 ou mais vezes e é ganancioso (uma extensão Perl).
    • [^#] corresponde a qualquer caractere que não seja # .
  • [^#]* fora do grupo de captura, correspondemos novamente a qualquer caractere que não seja # 0 ou mais vezes
  • (gmail|outlook) finalmente corresponde a gmail ou outlook

Eu fiz um arquivo de teste com exemplos diferentes:

$ cat file
# outlook
blah gmail # this should match
# gmail
  # gmail
        # foo
blah outlook # this should match
  outlook blah # gmail - this should match
foobar # gmail
        bar
        another gmail # this should match

A saída é:

blah gmail # this should match
blah outlook # this should match
  outlook blah # gmail - this should match
        another gmail # this should match

Claro, você pode executar isso em todos os seus arquivos *.ksh :

grep -P '^(?=[\s]*+[^#])[^#]*(gmail|outlook)' *.ksh  > a.log
    
por 25.09.2015 / 08:10
2

Assim, você deseja pesquisar todos os arquivos .ksh em seu diretório atual para a string gmail e outlook e excluir as linhas que começam com # e gravar a saída em a.log .

Ok, grep -P "^(?=[^#])(.*gmail.*|.*outlook.*)" *.ksh > a.log

    
por 25.09.2015 / 06:31
1

Que tal usar:

egrep "gmail|outlook" *.ksh | grep -v ^[#]

Primeiro grep obtém todas as linhas que contêm "gmail" ou "outlook", e a segunda grep omite as linhas comentadas

    
por 14.08.2017 / 16:04