Perl one-liner:删除带有模式匹配的行

shi*_*987 7 perl

我试图删除文件中的一堆行,如果它们与一个可变的特定模式匹配.

我想删除与abc12,abc13等匹配的行.

我尝试编写一个C-shell脚本,这是代码:

    **!/bin/csh
    foreach $x (12 13 14 15 16 17)
    perl -ni -e 'print unless /abc$x/' filename
    end**
Run Code Online (Sandbox Code Playgroud)

这不起作用,但是当我使用没有变量的单行程(abc12)时,它可以工作.

我不确定模式匹配是否有问题,或者是否还有其他我缺少的东西.

Sob*_*que 12

是的,这是你使用单引号的事实.这意味着$x正在按字面解释.

当然,你这样做的效率非常低,因为你多次处理每个文件.

如果您想删除线条abc12,abc17可以一次性完成:

perl -n -i.bak -e 'print unless m/abc1[234567]/' filename
Run Code Online (Sandbox Code Playgroud)