我如何 grep 按字数过滤列?

How do I grep filter a column by word count?

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

类似于:

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

这个功能真的存在吗?

只需使用 awk 而不是 grep,就像这样:

awk 'NF < 3' file

NF表示字段数

使用 grep,您可以匹配与 1 或 2 个单词完全匹配的模式:

grep -E '^\w+(\s+\w+)?$' someFile.txt

(请注意,这假设您没有任何空行,或者不想 select 那些。)


使用 awk 你可以只使用字段数条件:

awk 'NF < 3' someFile.txt

Grep

grep -E '^$|^\S+(\s+\S+)?$' file
  • \S 是非space 字符;
  • ? 使前面的模式可选(重复零次或一次)。
  • | 是交替运算符(如果任一模式匹配,结果为 true);
  • ^$匹配空行;

相同的模式也适用于 -P 选项(Perl 兼容的正则表达式)。


GNU Sed:

sed -nr '/^$|^\S+(\s+\S+)?$/ p' file

哪里

  • p 是打印当前模式 space(特别是当前行)的命令,如果前面的模式与该行匹配;
  • -n 关闭图案 space.
  • 的自动打印

模式与上面的 grep 命令相同。


Perl

perl -C -F'/\s+/' -ane 'print if scalar @F < 3' < file

哪里

  • -C 启用 Unicode 支持;
  • -F 指定 -a 开关的模式(将输入拆分为 @F 数组的自动拆分模式);
  • -n 使输入的每一行由 -e 指定的脚本变为 运行;
  • scalar @Freturns项数@F,即字段数