Perl 单行 : deleting a line with pattern matching

标签 perl

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

我正在尝试删除与 abc12、abc13 等匹配的行。

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

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

这不起作用,但是当我使用没有变量的单行 (abc12) 时,它起作用了。

我不确定模式匹配是否有问题,或者是否还有其他我遗漏的地方。

最佳答案

是的,这是您使用单引号的事实。这意味着 $x 是按字面解释的。

当然,您这样做的效率也非常低,因为您要多次处理每个文件。

如果您想删除 abc12abc17 的行,您可以一次性完成所有操作:

perl -n -i.bak -e 'print unless m/abc1[234567]/' filename

关于Perl 单行 : deleting a line with pattern matching,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33974230/

相关文章:

perl - 如何为遗留系统创建构建?

perl - 如何使用 Makefile.PL 和 ExtUtils::MakeMaker 复制文件?

linux - Perl 搜索和替换

perl - 如何使用 GetOptions 实用程序处理 Perl 中的 'optional' 命令行参数?

arrays - 如何对 Perl 数组进行分页?

regex - 将字符串解析为哈希

php - PHP 或 Perl 是我的 Web 项目的正确选择吗?

perl - 如何在 Perl 中更改 ffmpeg.exe 的屏幕输出?

perl - 如何确定 Perl 模块是否是跨平台的?

perl - 为什么我的 getpwent() 调用返回错误的用户?