Grepは文字列を見つけましたが、文字列を含むコメント付きアイテムを無視します。

Grepは文字列を見つけましたが、文字列を含むコメント付きアイテムを無視します。

gmail単語やカテゴリを探していますoutlook。一部の行はコメントアウトされていgmailますoutlook。私は何をgrepすべきですか?

私はたくさん試してみましたが、次のようになると思いました。

grep "^[^#;]" | egrep -i "gmail|outlook" *.ksh  > a.log

ベストアンサー1

そしてgrep

grep -P '^(?=[\s]*+[^#])[^#]*(gmail|outlook)' file
  • -PPerl準拠の正規表現を有効にします。
  • ^(?=...)パターンの一部ではないキャプチャグループ(プレビュー、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

おすすめ記事