我有一个包含各种通配符的文件,我希望能够从(Bash)shell 脚本中替换它。我有以下内容,该内容非常有效,直到其中一个变量包含正则表达式特有的字符:
VERSION="1.0"
perl -i -pe "s/VERSION/${VERSION}/g" txtfile.txt # No problems here
APP_NAME="../../path/to/myapp"
perl -i -pe "s/APP_NAME/${APP_NAME}/g" txtfile.txt # Error!
因此,我想要的只是执行文字文本替换而不是正则表达式。是否有 Perl 或其他工具的简单单行调用可以执行此操作?
执行此操作的“正确”方法是转义 shell 变量的内容,以便它们不会被视为特殊的正则表达式字符。你可以在 Perl 中使用 \Q 来完成此操作,如下所示
s/APP_NAME/\Q${APP_NAME}/g
但是当从 shell 脚本调用时,反斜杠必须加倍以避免丢失,如下所示
perl -i -pe "s/APP_NAME/\\Q${APP_NAME}/g" txtfile.txt
但我建议用 Perl 编写整个脚本会容易得多
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)