如果多个匹配则打印行

时间:2015-11-12 16:31:39

标签: perl text

我是Perl的新手并试图让它发挥作用。当第1列的内容==> 0并且第2列包含“I”(罗马数字为1)时,我希望打印3个特定列。以下内容返回包含> 0但不包含“I”的所有行。

perl -lane 'print "$F[0]\t$F[1]\t$F[5]" if $F[1] > 0 && $F[0]==/I/' input > output

我做错了什么?我也在努力让它与模式完全匹配,例如我不希望它拉出“II”或“VIII”。

1 个答案:

答案 0 :(得分:5)

您需要使用binding operator =~,而不是==这是一个数字相等测试,以针对正则表达式模式测试字符串

如果要指定其全部内容,则需要锚定模式的开头和结尾。在Metacharacters

中了解相关信息
$F[0]==/I/

应该是

$F[0] =~ /^I$/

或者,更好的是,只使用字符串相等性测试

$F[0] eq 'I'