Untuk portabilitas, saya tidak mengandalkan fitur sed yang khusus untuk linux atau BSD. Sebagai gantinya saya menggunakan overwrite
skrip dari Kernighan dan buku Pike di Unix Programming Environment.
Perintahnya kemudian
find /the/folder -type f -exec overwrite '{}' sed 's/old/new/g' {} ';'
Dan overwrite
skrip (yang saya gunakan di semua tempat) adalah
#!/bin/sh
case $# in
0|1) echo 'Usage: overwrite file cmd [args]' 1>&2; exit 2
esac
file=$1; shift
new=/tmp/$$.new; old=/tmp/$$.old
trap 'rm -f $new; exit 1' 1 2 15
if "$@" >$new
then
cp $file $old
trap 'trap "" 1 2 15; cp $old $file # ignore signals
rm -f $new $old; exit 1' 1 2 15
cp $new $file
else
echo "overwrite: $1 failed, $file unchanged" 1>&2
exit 1
fi
rm -f $new $old
Idenya adalah bahwa itu menimpa file hanya jika perintah berhasil. Berguna di find
dan juga di tempat yang tidak ingin Anda gunakan
sed 's/old/new/g' file > file
karena shell memotong file sebelum sed
dapat membacanya.