在 Unix(运行 MacOS High Sierra)中,我见过一些不同的搜索/替换(在多个文件上)方法,例如:
perl -pi -w -e 's/SEARCH_FOR/REPLACE_WITH/g;' *.txt
或使用sed
orgrep
等。问题是,如何正确转义搜索字符串?例如,如果我需要替换http://my.site/dir
为http://new.my.site/dir
,显然我不能在搜索字符串中包含正斜杠而不转义。
答案1
如果是专门这个命令,请注意,使用 Perl 作为s///
运算符,您可以选择其他分隔符,/
这样您的生活就会变得更加轻松,因为您不必转义任何内容。
因此,以下内容将起作用:
perl -pi -w -e 's!http://my.site/dir!http://new.my.site/dir!g;' *.txt
您可以使用!
您喜欢的任何其他字符,只要它既不出现在源字符串也不出现在替换字符串中。另外,由于整个“脚本”位于'
其内容之下,因此 shell 不会解析它,因此您也可以免受 shell 等内容插值的影响$
。
看https://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators了解所有详细信息。