linux + perl + 用条件替换文件中的任何 WORD 与特殊字符

linux + perl + 用条件替换文件中的任何 WORD 与特殊字符

当我想用 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 字符类。括号周围该字符类的括号是您想要进入的范围。

相关内容