在Linux目录中搜索并替换所有文件中的文本

28
我有一个网站目录,需要将所有硬编码链接从一个域更改为另一个域。寻找一个能够在目录中的所有文件中更改所有文本出现次数的单一(grep?sed?)bash命令?
2个回答

48
以下代码可以实现此功能:
sed -i 's/old_link/new_link/g' file...

在链接地址中,不要忘记使用反斜杠对任何斜线、点和其他正则表达式特殊字符进行转义。


7
您可以在sed命令中使用替代分隔符以避免进行一些转义: sed -i 's|旧/带/斜杠的|新/带/斜杠的/g' - Dennis Williamson
我认为您的意思是:s|old/with/slashes|new/with/slashes|g。是的,您可以使用一个在文件名中无效但可以用作sed分隔符的字符来避免转义字符。 - Michael Goldshteyn
3
我使用内置在OSX中的“sed”,我必须使用“sed -i .backup 's/old/new/g' *”命令。也就是说,我必须为“-i”标志添加一个“备份后缀”值,用于在sed修改文件时备份它们。这些备份文件将保留下来,所以我需要使用“find”命令将它们删除。 - Jonathan Hartley
2
请参考此答案,了解递归替换和省略目录的相关编程内容:https://dev59.com/02w15IYBdhLWcg3wMpAY#6759339 - willscripted
1
如果您的目录中有不可编辑的二进制文件,则此答案将失败。应优先考虑will-ob的链接。 - smcg

2

另外,尝试以下内容:

perl -p -i -e <regex> <folder>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接