当我想用 NEW_TEXT 替换 OLD_TEXT 时,Example1 工作正常(它还替换所有特殊字符为 $@^%)(_+`:; 等..)
example1
export OLD_TEXT='$$OLD_WORD$$'
export NEW_TEXT='$$NEW_WORD$$'
perl -pe 'next if /^#/; s/\Q$ENV{OLD_TEXT}\E/$1$ENV{NEW_TEXT}$2/g' file
在示例2上
我在 perl 语法中添加了“[[:^alnum:]]”,以便忽略以字母数字字符开头或以字母数字字符结尾的文本
但正如大家所见,它不起作用,为什么?
备注:字母数字字符表示数字 OR [az][AZ]
真实例子
#example2 on LINUX machine:
more file
ABC$$OLD_WORD$$ABC
$$OLD_WORD$$
。
perl -pe 'next if /^#/; s/(\Q|[[:^alnum:]])$ENV{OLD_TEXT}(\E|[[:^alnum:]])/$1$ENV{NEW_TEXT}$2/g' file
$$NEW_WORD$$ABC$$$NEW_WORD$$$$$NEW_WORD$$OLD_$$NEW_WORD$$WORD$$$NEW_WORD$$$$$NEW_WORD$$ABC
。
我应该得到的示例:
more file
ABC$$OLD_WORD$$ABC
$$NEW_WORD$$
答案1
你想要[^[:alnum:]]
,没有[[:^alnum:]]
。[:alnum:]
是所引用的 POSIX 字符类。括号周围该字符类的括号是您想要进入的范围。