首页 > 解决方案 > 使用 grep 查找单词

问题描述

在 alice.txt 中找到至少包含 17 个单词的行。

提示1:要检查一个单词是否已经结束,请查找以下字符:([, ; : ’ .]注意列表中还有一个空格)

提示 2:您的代码应返回 13 行

第一次尝试输出 15 个单词而不是 17 个单词,并且有 13 行第二次尝试没有输出任何内容,但我认为总体思路是正确的,除非我遗漏了一些东西......

第一次尝试:

grep -Ein "([a-z]+[, ;:'\.]){15,}" alice.txt

第二次尝试:

grep -Ein "(\b[a-z]+\b){17,}" alice.txt

预期结果是正确的,但只产生了 15 个修饰符,而不是问题中要求的 17 个。然而,代码返回 13 行

标签: shellunixgrep

解决方案


以下是您在 UNIX 中使用 GNU awk 进行 FPAT 真正做到这一点的方法:

awk -v FPAT='\\w+' 'NF>16'

例如:

$ echo 'foo bar, etc.' | awk -v FPAT='\\w+' '{print NF}'
3
$ echo 'foo bar, etc.' | awk -v FPAT='\\w+' 'NF>2'
foo bar, etc.
$ echo 'foo bar, etc.' | awk -v FPAT='\\w+' 'NF>3'
$

推荐阅读