我有一个像这样的文本文件(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
但它显示的输出与输入文件完全相同。
我在这里可以匹配的确切模式是什么?
谢谢
First, print unless
means print if not
——与你想要的相反。
更重要的是,使用两者没有意义-n
and -p
,当你这样做时-p
覆盖另一个。当他们都打开输入文件并设置行循环时,-p
还打印$_
for every迭代。所以用它你可以重印每一行。看perlrun http://perldoc.perl.org/perlrun.html.
最后,你似乎要删除.bak
文件 ... ?那就别来了。仅使用-i
共
perl -i -ne 'print if /:\s*\d+\s*-\s*\d+/' input.txt
如果您确实想保留备份文件,请使用-i.bak
代替-i
您可以看到相当于带有特定选项的单行代码B::离开 http://perldoc.perl.org/B/Deparse.html (via O http://perldoc.perl.org/O.html module)
Try: perl -MO=Deparse -ne 1
and perl -MO=Deparse -pe 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)