perl+;将规则添加到perl单行命令

perl+;将规则添加到perl单行命令,perl,Perl,下面的Perl语法将旧的替换为新的,但如果旧单词之前或之后存在数字,则不会这样做 OLD=ABBA1 ; export OLD NEW=OBAMA1 ; export NEW perl -i -pe 'next if /^ *#/; s/(\b|\D)$ENV{OLD}(\b|\D)/$1$ENV{NEW}$2/g' file 我的问题: 如果a-z或a-z字母出现在旧单词之前或之后,我也不想用新字母替换旧字母 OLD=ABBA1 ; export OLD NEW=OBAMA1 ;

下面的Perl语法将旧的替换为新的,但如果旧单词之前或之后存在数字,则不会这样做

 OLD=ABBA1 ; export OLD
 NEW=OBAMA1 ; export NEW

 perl -i -pe 'next if /^ *#/; s/(\b|\D)$ENV{OLD}(\b|\D)/$1$ENV{NEW}$2/g' file
我的问题: 如果a-z或a-z字母出现在旧单词之前或之后,我也不想用新字母替换旧字母

 OLD=ABBA1 ; export OLD
 NEW=OBAMA1 ; export NEW

 perl -i -pe 'next if /^ *#/; s/(\b|\D)$ENV{OLD}(\b|\D)/$1$ENV{NEW}$2/g' file
请建议如何更改我的Perl语法以实现此目的

示例(旧单词需要替换为新单词): 这对我很有用:

OLD=ABBA1 ; export OLD
NEW=OBAMA1 ; export NEW

perl -pe 'next if /^ *#/;
          s/(\b|[[:^alnum:]])$ENV{OLD}(\b|[[:^alnum:]])/$1$ENV{NEW}$2/g' <<!

ABBA1R  - not replace
QABBA1  - not replace
ABBA1W  - not replace
@ABBA1  - replace
ABBA1=  - replace
ABBA1w  - not replace
4ABBA1  - not replace
ABBA11  - not replace
e  ABBA1  - replace  (remark between e to ABBA1 I have space)
ABBA1 p   - replace   (remark between ABBA1 to p I have space)
?ABBA1    - replace
_ABBA1_   - replace

!

看看我的问题,如果a-z或a-z之前或之后的旧词,然后不需要更换!!!您需要捕获括号才能使用
$1
$2
;s/$ENV{OLD}/$1$ENV{NEW}$2/g'文件,在那之后,ABBA1R被OBAMA1替换为什么?嗨,ABBA1必须被替换,请你能把它添加到code@JonathanLeffler对我的错误表示抱歉,但请添加定义为将“ABBA1”替换为“OBAMA1”的规则
ABBA1R  - not replace
QABBA1  - not replace
ABBA1W  - not replace
@OBAMA1  - replace
OBAMA1=  - replace
ABBA1w  - not replace
4ABBA1  - not replace
ABBA11  - not replace
e  OBAMA1  - replace  (remark between e to OBAMA1 I have space)
OBAMA1 p   - replace   (remark between OBAMA1 to p I have space)
?OBAMA1    - replace
_OBAMA1_   - replace