有多种方法可以在多个文件中将一个文本字符串替换为另一个文本字符串。这里有几种方法:
使用 sed 并找到:
sed 's/oldstring/newstring/' "$1" > "$1".new && find -iname "*.new" | sed 's/.new//' | sh
使用 grep 和 sed:
grep -rl oldstring . | xargs sed -i -e 's/oldstring/newstring/'
使用 grep 和 perl:
grep -rl oldstring . | xargs perl -pi~ -e 's/oldstring/newstring/'
请提出你自己的建议。
像这样使用 GNU find、xargs 和 sed:
根据需要调整
-P
和-n
参数。这/g
是必需的,以便替换一行中的每个出现,而不仅仅是第一个(如果我没记错的话g
代表全局)。您还可以传递一个值来--in-place
进行备份。我喜欢 perl 的就地过滤配方。
在上下文中...
这是使用的 perl 咒语的修剪快速参考...
我会为此使用 Python。将所有这些代码放入一个名为 mass_replace 和“
chmod +x mass_replace
”的文件中:对于一种类型文件中的一个字符串的单个搜索和替换,使用 find 和 sed 的解决方案还不错。但是如果你想一次做很多处理,你可以编辑这个程序来扩展它,它会很容易(并且第一次很可能是正确的)。
假设文件列表不是一英里长,您不需要使用 xargs,因为 sed 可以在命令行上处理多个文件:
如果用“/”字符替换 URL,请小心。
如何做到这一点的一个例子:
摘自:http ://www.sysadmit.com/2015/07/linux-reempazar-texto-en-archivos-con-sed.html
感谢大家的一些很好的答案!这非常有帮助。
由于我没有数百个文件可以替换其中的行,因此我使用了 do 循环,如下所示:
希望有帮助!