Grep はパターンファイルのすべてのエントリと一致します。

Grep はパターンファイルのすべてのエントリと一致します。

パターンファイルがあり、それをファイルディレクトリと比較したいと思います。

パターンファイルの内容は次のとおりです(正規表現でもかまいません)。

pattern-that-occurs-in-file
pattern-that-also-occurs-in-file

コンテンツがパターンと一致する場合に表示される検索ファイルの例:

unrelated content
pattern-that-occurs-in-file
more unrelated content
pattern-that-also-occurs-in-file
further unrelated content

または:

unrelated content
pattern-that-also-occurs-in-file
more unrelated content
pattern-that-occurs-in-file
further unrelated content

サンプル検索ファイルは次のとおりです。いいえ来て:

unrelated content
more unrelated content
pattern-that-occurs-in-file
further unrelated content

または:

unrelated content
pattern-that-also-occurs-in-file
more unrelated content
further unrelated content

または:

unrelated content
more unrelated content
further unrelated content

2つのパターンが表示されるファイルのリストを出力するには、grepが必要です。一致する線が見えても構いません。

単一のコマンドでこれを実行できますか?それでは、どうすればいいですか?

ベストアンサー1

正確なコマンドではありませんが、次のようになります。

num_patterns=$( wc -l < patterns_file )
for file in dir/*; do
    num_occurrances=$( grep -F -o -f patterns_file "$file" | sort -u | wc -l )
    if (( num_patterns == num_occurrances )); then
        echo "all patterns in $file"
    fi
done

パターンが正規表現の場合、一致テキストはすべての一致に対して一意でない可能性があるため、この方法は機能しません。

おすすめ記事