命令行搜索和替换中的转义字符

命令行搜索和替换中的转义字符

在 Unix(运行 MacOS High Sierra)中,我见过一些不同的搜索/替换(在多个文件上)方法,例如:

perl -pi -w -e 's/SEARCH_FOR/REPLACE_WITH/g;' *.txt

或使用sedorgrep等​​。问题是,如何正确转义搜索字符串?例如,如果我需要替换http://my.site/dirhttp://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了解所有详细信息。

相关内容