我想在几个文件中查找字符串"foo"并替换为"bra",遍历目录(Linux机器)。如果在文件"example.txt"中替换了一个字符串,我需要在字符串替换之前将该文件复制到"example.text.old"。
我可以像这样递归替换字符串是文件:
find . -type f -name '*' -exec sed -i 's/test1/test2/g' {} +
它工作正常,但是当某些东西不起作用时没有备份。
或者,我偶然发现了这个可以工作的perl脚本,尽管我使用本机unix命令更舒服。
# perl -e "s/old_string/new_string/g;" -pi.save $(find DirectoryName -type f)
但是,这会备份所有文件,这不是我想要的。
我 replace.sh 制作了这个 bash 脚本,以便以后重用
#!/bin/bash
old=$1
new=$2
grep -r -l "$old" --exclude='*.{sh,old}' * | while read -r line ; do
cp "$line" "$line.old"
echo "Replacing '$old' with '$new' in file '$line'"
sed -i "s/$old/$new/g" "$
done
使其可执行
$chmod +x replace.sh
注意:如果使用 Cygwin for Windows,您可能需要使用 dos2unix: dos2unix replace.sh
然后用两个字符串作为参数运行它,要查找的字符串和将替换的字符串是
./replace.sh foo bar
这将备份 (.old) 所有文件(不包括 .旧的和.sh)包含单词"foo",然后用"bar"替换它
任何有用的提示将不胜感激!