次のコードは機能しますが、非常に低速です。
#!/bin/bash
for f in *.xml; do
for r in $(cat ../reports.txt); do
grep -q "$r" $f
if [ $? -eq 0 ]; then
echo "$r,$f"
fi
done
done
これは、次を使用して高速化できます。
for f in *.xml; do
grep -lif ../reports.txt $f
done
reports.txt
ただし、これには、ファイル()と一致することが判明した行は表示されません$f
。
reports.txt
各ファイルで見つかった一致する行を、1つ以上一致したファイルの名前とともにどのように表示しますreports.txt
か?
たとえば、次がreports.txt
含まれている場合:
aardvark
aardwolf
anteater
そして、ファイルの1つ(たとえば、story.txt)には次のものが含まれています。
This is a story about an aardvark and an aardwolf.
次に、次の出力を生成しようとしています。
story.txt,aardvark
story.txt,aardwolf
それが役立つ場合、の行reports.txt
は正規表現ではありません。プレーンテキストの文字列です。
何か案は?