पोर्टेबिलिटी के लिए, मैं लिनक्स या बीएसडी के लिए विशिष्ट sed की विशेषताओं पर भरोसा नहीं करता हूं। इसके बजाय मैं यूनिक्स प्रोग्रामिंग पर्यावरण पर कर्नीघान और पाइक की पुस्तक से overwrite
स्क्रिप्ट का उपयोग करता हूं।
आदेश तो
find /the/folder -type f -exec overwrite '{}' sed 's/old/new/g' {} ';'
है और overwrite
स्क्रिप्ट (जो मैं जगह पर सभी का उपयोग)
#!/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
है विचार है कि यह एक फ़ाइल को केवल तभी एक कमांड सफल होता है अधिलेखित कर देता है। find
में उपयोगी है और यह भी आप क्योंकि खोल फ़ाइल ट्रंकेटस
sed 's/old/new/g' file > file # THIS CODE DOES NOT WORK
उपयोग करने के लिए इससे पहले कि sed
यह पढ़ सकते हैं नहीं चाहेंगे कि जहां।
स्रोत
2009-05-25 03:12:43
http://theunixshell.blogspot.com/2012/12/find-and-replace-string-in-all-files.html – Vijay