【问题标题】:perl + delete the line only if match the exactly string in lineperl + 仅当与行中的字符串完全匹配时才删除该行
【发布时间】:2017-01-25 23:24:44
【问题描述】:

我正在处理以下文件:

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 语法中需要更改的内容,以便仅删除具有双配额之间匹配字符串的行

【问题讨论】:

    标签: regex linux perl


    【解决方案1】:

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

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

    【讨论】:

    • 我试过了,但是所有行都打印出来了,没有删除相关行(我的 perl 版本 - v5.10.1)
    • @Jogeff:答案很好;您在环境变量中犯了一个错误。您的 export 命令中有 /ME/UK/ 而不是 /MES/UK/
    猜你喜欢
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 2023-03-03
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多