gpt4 book ai didi

perl 一行只保留所需的行

转载 作者:行者123 更新时间:2023-12-05 08:56:29 24 4
gpt4 key购买 nike

我有一个这样的文本文件 (input.txt):

NP_414685.4: 15-26, 131-138, 441-465
NP_418580.2: 493-500
NP_418780.2: 36-48, 44-66
NP_418345.2:
NP_418473.3: 1-19, 567-1093
NP_418398.2:

我想要一个 perl 单行代码,它只保留文件中“:”后跟数字范围的那些行(这意味着,在这里,包含“NP_418345.2:”和“NP_418398.2:”的行被删除).为此,我尝试过:

perl  -ni -e "print unless /: \d/" -pi.bak input.txt del input.txt.bak

但它显示的输出与输入文件完全相同。我可以在这里匹配的确切模式是什么?谢谢

最佳答案

首先,print unless 表示 print if not -- 与您想要的相反。

更重要的是,同时使用 -n-p 是没有意义的,当您使用 -p 时会覆盖另一个。当它们都打开输入文件并设置行循环时,-p 还会为每个 迭代打印$_。所以用它你要重印每一行。参见 perlrun .

最后,您似乎要删除 .bak 文件……?那就别做了。仅使用 -i

总计

perl -i -ne 'print if /:\s*\d+\s*-\s*\d+/' input.txt

如果您确实想保留备份文件,请使用 -i.bak 而不是 -i


您可以使用 B::Deparse 看到与具有特定选项的单行代码等效的代码(通过 O 模块)

尝试:perl -MO=Deparse -ne 1perl -MO=Deparse -pe 1

关于perl 一行只保留所需的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40256438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com