我试图设计一个grep过滤器,其中我有2个或更少的单词。奇怪的是,我在寻找这个答案时空白了。
类似的东西:
cat someFile.txt | grep count(\w) < 3
这项功能是否存在?
答案 0 :(得分:1)
就这样使用awk而不是grep
:
awk 'NF < 3' file
NF
代表字段数。
答案 1 :(得分:1)
使用grep
,您可以匹配恰好匹配1或2个单词的模式:
grep -E '^\w+(\s+\w+)?$' someFile.txt
(请注意,这假设您要么没有任何空行,要么也不想选择那些。)
使用awk
您可以使用字段数条件:
awk 'NF < 3' someFile.txt
答案 2 :(得分:1)
<强> grep的强>
grep -E '^$|^\S+(\s+\S+)?$' file
\S
是非空格字符; ?
使前面的模式可选(重复零次或一次)。|
是交替运算符(如果其中任何一个模式匹配,则结果为 true ); ^$
匹配空行; 同样的模式也适用于-P
选项(Perl兼容的正则表达式)。
GNU Sed :
sed -nr '/^$|^\S+(\s+\S+)?$/ p' file
,其中
p
是一个命令,用于打印当前模式空间(特别是当前行),如果前面的模式与行匹配; -n
关闭图案空间的自动打印。模式与上面的grep
命令相同。
<强>的Perl 强>
perl -C -F'/\s+/' -ane 'print if scalar @F < 3' < file
,其中
-C
启用Unicode支持; -F
指定-a
切换的模式(将输入拆分为@F
数组的自动分割模式); -n
导致-e
指定的脚本为输入中的每一行运行; scalar @F
返回@F
中的项目数,即字段数。