0

特定のディレクトリ内のどのファイルに特定の検索文字列のセットがすべて含まれているかを判断するためのより良い方法を見つけようとしています。私が現在やっているやり方は厄介なようです。

たとえば、「aaa」、「bbb」、「ccc」、および「ddd」が含まれているファイルを検索する場合は、次のようにします。

grep -l "aaa" * > out1
grep -l "bbb" `cat out1` > out2
grep -l "ccc" `cat out2` > out3
grep -l "ddd" `cat out3` > out4
cat out4
rm out1 out2 out3 out4

ご覧のとおり、これは不器用なようです。より良いアイデアはありますか?

編集:私はSolaris10マシンを使用しています

4

2 に答える 2

1

xargsを使用して、grep呼び出しをチェーン化できます。

grep -l "aaa" * | xargs grep -l "bbb" | xargs grep -l "ccc" | xargs grep -l "ddd"
于 2013-01-28T18:20:33.050 に答える
1

これに沿った何かが役立つかもしれません:

for file in * ; do
   matchall=1
   for pattern in aaa bbb ccc ddd ; do
      grep "$pattern" "$file" >/dev/null || { matchall=0; break ; }
   done
   if [ "$matchall" -eq "1" ]; then echo "maching all : $file" ; fi
done

aaa bbb ccc ddd(のようなものに置き換えることでパターンを追加できます$(cat patternfile))

興味のある人のために:1)各ファイルをループし、2)各ファイルをループします:これがすべてのパターンに一致すると仮定し、パターンをループします:パターンがファイルに現れなくなるとすぐに、そのパターンループ終了すると、そのファイルの名前は表示されず、次のファイルをチェックします。つまり、「matchall」を 0 に設定することなく、すべてのパターンを通過したファイルのみを印刷します。

于 2013-01-28T18:39:55.357 に答える