Vì tính di động, tôi không dựa vào các tính năng của sed dành riêng cho Linux hoặc BSD. Thay vào đó, tôi sử dụng tập lệnh overwrite
từ cuốn sách của Kernighan và Pike trên Môi trường lập trình Unix.
Lệnh là sau đó
find /the/folder -type f -exec overwrite '{}' sed 's/old/new/g' {} ';'
Và overwrite
kịch bản (mà tôi sử dụng khắp nơi) là
#!/bin/sh
# overwrite: copy standard input to output after EOF
# (final version)
# set -x
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 # clean up files
if "[email protected]" >$new # collect input
then
cp $file $old # save original file
trap 'trap "" 1 2 15; cp $old $file # ignore signals
rm -f $new $old; exit 1' 1 2 15 # during restore
cp $new $file
else
echo "overwrite: $1 failed, $file unchanged" 1>&2
exit 1
fi
rm -f $new $old
Ý tưởng là nó ghi đè một tập tin duy nhất nếu một lệnh thành công. Hữu ích trong find
và cũng là nơi bạn sẽ không muốn sử dụng
sed 's/old/new/g' file > file # THIS CODE DOES NOT WORK
vì vỏ truncates các tập tin trước khi sed
có thể đọc nó.
Nguồn
2009-05-25 03:12:43
http://theunixshell.blogspot.com/2012/12/find-and-replace-string-in-all-files.html – Vijay