如果多个匹配则打印行

Ann*_*ann 1 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
Run Code Online (Sandbox Code Playgroud)

我做错了什么?我也在努力让它与模式完全匹配,即我不希望它拉出"II"或"VIII".

Bor*_*din 5

您需要使用绑定运算符 =~(而不是==数字相等性测试)来针对正则表达式模式测试字符串

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

$F[0]==/I/
Run Code Online (Sandbox Code Playgroud)

应该

$F[0] =~ /^I$/
Run Code Online (Sandbox Code Playgroud)

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

$F[0] eq 'I'
Run Code Online (Sandbox Code Playgroud)