С grep
:
grep -P '^(?=[\s]*+[^#])[^#]*(gmail|outlook)' file
-P
активирует регулярные выражения, совместимые с Perl. ^(?=...)
определяет группу захвата, которая не является частью шаблона (lookahead; расширение Perl). ^
означает начало строки.
\s
соответствует любому символу пробела, *+
соответствует пробелу 0 или более раз и является жадным (расширение Perl). [^#]
соответствует любому символу, который не является #
. [^#]*
вне группы захвата мы снова сопоставляем любой символ, который не является #
0 или более раз(gmail|outlook)
наконец, сопоставляем gmail
или outlook
Я сделал тестовый файл с различными примерами:
$ 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
Вывод:
blah gmail # this should match
blah outlook # this should match
outlook blah # gmail - this should match
another gmail # this should match
Конечно, вы можете запустить это на всех ваших *. ksh
файлах:
grep -P '^(?=[\s]*+[^#])[^#]*(gmail|outlook)' *.ksh > a.log