1行で複数の文字列を検索

1行で複数の文字列を検索

私はUnixに初めてアクセスし、CygWIN64エミュレータを使用しています。特定の文字列を検索するために必要な数のテキストファイルがあります。私は単一の文字列を使用して検索する方法を正常に学びましたが、数日間試しても2つの文字列を検索する方法はわかりません。

私のファイルは次の場所にあります。c:/BF/data/

私の単一文字列コマンドは次のとおりです。

grep -Rinw c:/BF/data/ -e 'string'

オンラインの例をたくさん試しましたが、2つの文字列を処理するコマンドを取得できません(OR構造ではなくAND構造)。これら2つの文字列が1行に表示される場合は、その行を画面に表示したいと思います。今回もひもひとつでこれを行うことができました。文字列にスペースが含まれている可能性があります(これが違いがある場合)。例えば、ある文字列は「ミアミ」であり、他の文字列は「ニューヨークシティ」であってもよい。

grep別のコマンドを試しましたが、awk何も機能しません。

誰かが私に正しい方向を教えてもらえますか?

ベストアンサー1

1行で2つの文字列を見つけるには:

Perl互換の正規表現でGNU grepを使用してください。

grep -RinP '^(?=.*\bMiami\b)(?=.*\bNew York City\b)' dir/

\b単語の境界として使用されるPerl正規表現。

GNU awkを使う:

gawk -v IGNORECASE=1 '
    /\<Miami\>/ && /\<New York City\>/ {
        print FILENAME ":" NR ":" $0
    }
' file

拡張正規表現は単語の境界線とを\<使用します。\>

ただし、awkに対応する項目はありません-R。 find を使用できます。

find dir/ -type f -exec gawk -v IGNORECASE=1 '...' '{}' +

おすすめ記事