如何按字数过滤列?

时间:2016-12-13 22:07:54

标签: regex shell unix grep cat

我试图设计一个grep过滤器,其中我有2个或更少的单词。奇怪的是,我在寻找这个答案时空白了。

类似的东西:

cat someFile.txt | grep count(\w)  < 3

这项功能是否存在?

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中的项目数,即字段数。