HP-UX で再帰的な検索と置換を実行しようとしていますが、何か不足しています。
私が現時点で持っているもの:
find . -name "*.java" | xargs sed 's/foo/bar/g'
問題は、ファイルをインラインで置き換えていないことです。他の OS には -i フラグがあると思いますが、私の HP-UX バージョンにはないようです。
助言がありますか?
find . -name "*.java" | xargs sed -i 's/foo/bar/g'
また
find . -name "*.java" | xargs perl -pi -e's/foo/bar/g'
ファイルに対して好きなツールを実行し、それらを「その場で」変更するためのシンプルでポータブルなソリューション ( sed -i も舞台裏で tmp ファイルを使用します) は次のとおりです。
find . -name "*.java" |
while IFS= read -r file; do
sed 's/foo/bar/g' "$file" > tmp && mv tmp "$file"
done
sed、grep、cutなど、好きなものにそのアプローチを使用できます。
find . -name "*.java" |
while IFS= read -r file; do
grep "whatever" "$file" > tmp && mv tmp "$file"
done
唯一機能しないのは、名前に改行が含まれているファイルですが、find | xargs
ソリューションもそのままでは機能しません。とにかくそれらがある場合は、それらの名前を変更する必要があります。