gmail
単語やカテゴリを探していますoutlook
。一部の行はコメントアウトされていgmail
ますoutlook
。私は何をgrep
すべきですか?
私はたくさん試してみましたが、次のようになると思いました。
grep "^[^#;]" | egrep -i "gmail|outlook" *.ksh > a.log
答え1
そしてgrep
:
grep -P '^(?=[\s]*+[^#])[^#]*(gmail|outlook)' file
-P
Perl準拠の正規表現を有効にします。^(?=...)
パターンの一部ではないキャプチャグループ(プレビュー、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
答え2
したがって、.ksh
その文字列の現在のディレクトリ内のすべてのファイルを検索します。で始まる行を除いてgmail
出力を 。outlook
#
a.log
いいねgrep -P "^(?=[^#])(.*gmail.*|.*outlook.*)" *.ksh > a.log
答え3
使い方:
egrep "gmail|outlook" *.ksh | grep -v ^[#]
まず、grep
「gmail」または「outlook」を含むすべての行を取得し、2番目はgrep
コメント行を無視します。