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#
.
- Dentro desse grupo
-
[^#]*
fora do grupo de captura, correspondemos novamente a qualquer caractere que não seja#
0 ou mais vezes -
(gmail|outlook)
finalmente corresponde agmail
ououtlook
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