文字列を含み、他の文字列を含まないファイルを見つける

文字列を含み、他の文字列を含まないファイルを見つける

いくつかのファイルがあり、文字列は含まれていますが、他の文字列は含まれていないファイルを探したいとします。

grepはラインベースなので、このような条件はgrep -q printf file && grep -vq '#include <stdio.h>' file機能しません。

どうすればいいですか?

(私はDebianを使用しているので、ツールのGNUバージョンへの答えが適しています。)

ベストアンサー1

grep -vlパターンに一致する行が1つ以上あるファイル名を報告します。ここでは、パターンに一致する行のないファイルが必要です。 GNU grep(Debianにある)には、次の-Lオプションがあります。

grep -rlZ printf . | xargs -r0 grep -FL '#include <stdio.h>'

POSIXの場合、grep以下を無効にできますgrep -q

find . -type f -exec grep -q printf {} \; \
               ! -exec grep -Fq '#include <stdio.h>' {} \; \
               -print

grep各一般ファイルで 1 つまたは 2 つのインスタンスを実行するという意味なので、効率がはるかに低下します。

おすすめ記事