perl +只有在匹配行中的字符串时才删除该行

时间:2017-01-25 14:49:52

标签: regex linux perl

我处理以下文件:

more file1


name="UAT/CC/Global/MES/UK/adWerum-UK" 
name="UAT/CC/Global/MES/UK/adWerum-UK-Adapter" 
name="UAT/CC/Global/MES/UK/adWerum-UK1" 
name="HOME/UAT/CC/Global/ME/UK/adWerum-UK" 

我创建了以下perl命令,以便只删除带有反斜杠的字符串

UAT/CC/Global/ME/UK/adWerum-UK

perl语法:

perl -n -i -e 'print unless m/\Q$ENV{A}\E/' file1

问题是perl删除包含该行的所有行:

UAT/CC/Global/ME/UK/adWerum-UK    

例如

A=UAT/CC/Global/MES/UK/adWerum-UK
export A=UAT/CC/Global/ME/UK/adWerum-UK
perl -n -i -e 'print unless m/\Q$ENV{A}\E/' file1

more file1

file is empty

虽然预期结果是

name="UAT/CC/Global/MES/UK/adWerum-UK-Adapter" 
name="UAT/CC/Global/MES/UK/adWerum-UK1" 
name="HOME/UAT/CC/Global/ME/UK/adWerum-UK" 

请告知我的perl语法需要更改的内容,以便仅删除双重配额之间匹配字符串的行

1 个答案:

答案 0 :(得分:1)

为什么不在正则表达式模式中包含双引号?

perl -i -ne 'print unless /"\Q$ENV{A}\E"/' file1