【发布时间】:2011-12-19 17:16:28
【问题描述】:
我有一个包含各种通配符的文件,我希望能够从 (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 或其他工具的简单单行调用可以做到这一点?
【问题讨论】:
-
我认为答案是 “不,perl 中没有文字字符串的字符串替换”。您必须使用正则表达式,如果您希望正则表达式为文字,则必须使用
quotemeta或\Q \E,如perldoc quotemeta中所述 -
对于那些从搜索引擎结果中寻找方法来避免正则表达式(例如,出于性能原因)的人,glenn jackman's answer 和 Jess's answer 使用 substr() 和 index() 来实现这一点。