while read f; do
test -f "$f" && grep -F 'step2' "$f"
done <file1.dat
線はf
変数に一つずつ読み出されます。
ファイル$f
は、指定したファイル内のテキスト文字列step2
を探すためにgrep
を使用する前に存在していることを確認するためにwhile
- ループテストのボディ。少し冗長(同等の)
Aループのバージョン:
while read f; do
if [ -f "$f" ]; then
grep -F 'step2' "$f"
fi
done <file1.dat
あなたがこれを実行する場所に応じて、あなたは少しgrep
コマンドを変更する必要がある場合があります。あなただけのすべてのファイルとサブフォルダ上のフォルダでこれを実行する場合、例えば:
grep -F 'step2' "all_files/$f"
ニーズがあることかどうかは問題では完全には明らかに、しかし、簡単に調整できませんでした。もちろん
、あなただけの完全file1.dat
をバイパスし、全くループなし
grep -F 'step2' all_files/case?.txt
を言うことができます。
編集:新しい要件に:
find ./all_files -type f -name "case?.txt" -print0 |
xargs -0 grep -l -F 'step2'
これは再帰的に、all_files
フォルダの下にあるすべてのフォルダを検索case?.txt
に一致するファイルを検索し、希望の文字列が含まれているものを報告します。
パターンをより厳密に、おそらくcase[1-5].txt
のように変更したい場合があります。
はどうもありがとうございました。.. – user180946
しかし、出力にも一致するファイルがないことを示しています...エラー: 'sed:ファイルcase5.txtを開くことができません '、case5.txtはfile1.datに存在しますが、./all_filesフォルダには存在しません。助けてください – user180946
sedコマンドを適用する前に、ファイルが存在するかどうかをチェックするように更新しました。 – SLePort