特定の単語が含まれているファイルを確認するには、いくつかのファイルをgrepする必要があります:

grep -l word * 

次に、ファイルのリストをgrepして、どのファイルに別の単語が含まれているかを確認する必要があります。簡単な方法はおそらくスクリプトを書くことでしょうが、私はそれをどのように操作するのかよくわかりません。

コメント

  • どのgrep?GNU grep?Linux、Solaris、BSDを使用していますか?
  • I ' mはLinuxを使用しています。

回答

ファイル名に空白、一重引用符、二重引用符またはバックスラッシュ文字(または-で始まるGNU grep)を使用すると、次のことができます。

grep -l word * | xargs grep word2 

Xargs最初のgrepの各ファイルに対して2番目のgrepを実行します。

GNU grep / xargsまたは互換性がある場合、次の方法で信頼性を高めることができます。

grep -lZ word ./* | xargs -r0 grep word2 

-Zを使用するとgrep xargs -0で使用できるようにファイル名をNUL区切りで出力します。-rオプションをxargsは、最初のgrepが何も見つからない場合に2番目のgrepが実行されるのを回避します。

回答

grep -l word1 $(grep -l word2 *) 

または、同じ行にある2つの単語のいずれかについて:

grep -w "word1\|word2" * 

こちら

回答

単語を含むファイルを検索してから、別の単語を含むファイルを除外する必要がある場合は、次のような一連のコマンドを使用できます。

grep word * | awk -F ":" "{print $1}"|uniq | xargs grep word2 
  • grep word *-「word」を含むすべてのファイルが表示され、ファイル名がリストの最初になります。
  • awk -F ":" "{print $1}"-結果のファイル名のみを出力します
  • uniq-ファイル名を以上印刷しないようにします
  • xargs grep word2-取得したファイルのリストを再度検索します。

コメント

  • @don_crisstiしかし、ピースを組み合わせるgrep -l word1 * | xargs -d'\n' grep -l word2は、ほとんど誰も使用しないほど奇妙な改行以外のすべてで機能します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です