求助:使用Perl命令替换多行文本遇特殊字符及终端异常
解决Perl多行替换时的引号与特殊字符问题
你遇到的quote>提示,是因为bash环境下单引号内部的转义单引号不生效,导致命令的引号未闭合,shell一直等待你补全引号。
给你两个可行的解决办法:
方法一:换用双引号包裹脚本,替换分隔符避免冲突
把外层的单引号换成双引号,同时将Perl替换操作的分隔符从/改为|,这样路径里的/无需转义,脚本更清晰:
perl -0007 -i -pe "s|COMPREHENSIVE_THEME_DIRS:\n- ''|COMPREHENSIVE_THEME_DIRS:\n- '/edx/app/edxapp/edx-platform/themes'\n- '/edx/src/ti-theme/edx-platform'|igs"
方法二:保持单引号外层,用shell引号拼接技巧
如果坚持用单引号包裹脚本,内部的单引号可以用'\''拼接实现(先闭合单引号,插入一个单引号,再重新打开单引号):
perl -0007 -i -pe 's|COMPREHENSIVE_THEME_DIRS:\n- '\'''\''|COMPREHENSIVE_THEME_DIRS:\n- '\''/edx/app/edxapp/edx-platform/themes'\''\n- '\''/edx/src/ti-theme/edx-platform'\''|igs'
这种写法可读性较差,更推荐第一种方法。
补充说明:你用的-0007参数是对的,它启用了Perl的段落模式,适合处理这类多行配置块;如果目标配置块只会出现一次,修饰符里的g可以去掉,避免不必要的全局替换。
内容的提问来源于stack exchange,提问作者Labeeb
相关产品推荐
相关产品推荐

