web-dev-qa-db-ja.com

Solarisでの「sed -i」の代替

Linuxでは、sed -iは入力ファイルを適切に変更します。ただし、Solarisでは機能しません。

sed -i '$ s/OLD/NEW/g' test        
sed: illegal option -- i

Solarisでsed -iの代わりに何を使用できますか?

27
lidia

結果を一時ファイルに保存し、元のファイルを一時ファイルに置き換えることにより、-iの動作を自分で複製する必要があります。これは洗練されていないように見えるかもしれませんが、sed -iが内部で行うすべてのことです。

sed '$ s/OLD/NEW/g' test > test.tmp && cat test.tmp > test && rm test.tmp

気になっている場合は、mktempを使用して、もう少し堅牢にすることができます。

tmp=$(mktemp test.XXXXXX)
sed '$ s/OLD/NEW/g' test > "$tmp" && cat "$tmp" > test && rm "$tmp"
20
John Kugelman

Sed -iとまったく同じではありませんが、同様の問題がありました。これはPerlを使用して行うことができます。

Perl -pi -e 's/find/replace/g' file

コピー/移動の実行は、単一ファイルに対してのみ機能します。ディレクトリとサブディレクトリ内のすべてのファイルでテキストを置き換える場合は、適切な場所で行う必要があります。あなたはPerlでこれを行うことができます:

find . -exec Perl -pi -e 's/find/replace/g' '{}' \;
24
Charlie B