いくつかのファイルがあり、文字列は含まれていますが、他の文字列は含まれていないファイルを探したいとします。
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 つのインスタンスを実行するという意味なので、効率がはるかに低下します。