我想在几个文件中找到并用“bra”替换字符串“foo”,遍历目录(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)
然而,这会备份所有文件,这不是我想要的。
答案 0 :(得分:0)
我制作了这个bash脚本 replace.sh ,以便日后重复使用
#!/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
这使得包含单词'foo'的所有文件(旧和 .sh 除外)的备份( .old ),然后用'bar'替换它
非常感谢任何有用的提示!