我如何 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 @F
returns项数@F
,即字段数
我正在尝试设计一个 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 @F
returns项数@F
,即字段数