我要过滤包含超过3个项目的行
perl -ne 'print if split > 2' file.txt
但是当我想过滤少于3个项目的行时,我将无法使用
perl -ne 'print if split < 2' file.txt
#Unterminated <> operator at -e line 1.
我可以解决其中任何一个问题
perl -ne 'print if not split > 2' file.txt
perl -ne 'print if 2 > split' file.txt
但是我想知道为什么表达式只对<
,>
之一失败。
答案 0 :(得分:9)
经过一番挖掘,然后查看您帖子上的评论,我想我已经找到了答案。解析器在看到split <
时试图理解您的意思。调用拆分时没有括号,它需要猜测要传递的拆分参数数(需要0-3,有关详细信息,请参见perldoc -f split
。)
因此,似乎默认情况下假定您尝试使用至少一个参数来调用它,该参数看起来像空文件句柄<>
的开头。如果发现它不完整,则会打印错误并中止。
这说明了修复程序对您的帖子发表评论的原因。它们都清楚地说明了split将不带任何参数被调用,并且解析器不应查找表达式,然后可以将<
字符视为运算符。