
egrep
テキストでいっぱいのフォルダでさまざまなパターンを実行し、結果を適切なフォルダに出力したいと思います。また、これは私がよく使うワークフローなので、シンプルで簡潔に保つことを試みました。
そのため、テキストでいっぱいのフォルダがあり、docs
2つの異なる正規表現パターン(regex1とregex2)を見つけて出力したいと思いますdocs/regex1
。docs/regex2
これがうまくいくと思います。
mkdir {docs/regex1,docs/regex2}
for file in docs/*
do
egrep -o -f regex1 "$file" > regex1/"${file%.*}"_regex1.txt
egrep -o -f regex2 "$file" > regex2/"${file%.*}"_regex2.txt
done
これによりエラーが発生します。
regex1/docs/001_regex1.txt: No such file or directory
regex2/docs/001_regex2.txt: No such file or directory
各ファイルに。 regex1/docsに移動するのではなく、docs/regex1に移動するように出力を設定するにはどうすればよいですか?
答え1
サンプルスクリプトには次のものがあります。
egrep -o -f regex1 "$file" > regex1/"${file%.*}"_regex1.txt
egrep -o -f regex2 "$file" > regex2/"${file%.*}"_regex2.txt
ところで、あなたはこう尋ねます。
各ファイルに。 regex1/docsに移動するのではなく、docs/regex1に移動するように出力を設定するにはどうすればよいですか?
regex1
出力をリダイレクトするパスの先頭に明示的に配置します。必要に応じてこの問題を修正してから、デフォルトのパスを削除してください$file
。
egrep -o -f regex1 "$file" > docs/regex1/"$( basename "${file%.*}" )"_regex1.txt
egrep -o -f regex2 "$file" > docs/regex2/"$( basename "${file%.*}" )"_regex2.txt