linux - Grep,查找具有确切数量的匹配模式的行

标签 linux unix grep

我想查找并列出文本文件中仅包含两个四个字符或更多字符的单词的行。

我可以找到四个字符或更多字符的单词:

grep '[A-Za-z][A-Za-z][A-Za-z][A-Za-z][A-Za-z]*' file.txt

但是如何限制输出仅显示包含两个这样的单词的行?

有任何提示(不一定是答案)吗?

谢谢

更新: 谢谢。听从你的建议后,我现在是:

egrep '([A-Za-z]){4,}' file.txt

列出了所有包含 4 个以上字母长的突出显示单词的行。现在我只需过滤它以仅显示此类单词(4 个以上字母长)出现两次的行。有什么提示吗?

最佳答案

只需使用 awk,这样您就不必想出一些复杂的正则表达式来一次完成所有操作。使用 GNU awk 作为单词边界并假设您的“单词”仅包含字母字符,如您发布的脚本中所示:

awk 'gsub(/\<[[:alpha:]]{4,}\>/,"&") == 2'

当然,上述内容未经测试,因为您没有提供示例输入/输出供我们测试。

编辑: 这是 the text you referenced 第 216 页给出的解决方案在您对第 100 页练习 7.5 的评论中,您的问题是基于该练习:

egrep '(\<[A-Za-z]{4,}\>).*\<\1\>' file

让我们首先清理它,删除已弃用的egrep,并用可移植的字符类替换字符列表:

grep -E '(\<[[:alpha:]]{4,}\>).*\<\1\>' file

现在您拥有的是一个脚本,它不是像您的问题中所述查找只包含两个四个或更多字符的单词的行,而是查找包含相同4个或更多字符单词出现至少两次的行,这是一个非常不同且更容易解决的问题。

关于linux - Grep,查找具有确切数量的匹配模式的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52558365/

相关文章:

python - Bash 解析和连接执行 python 的参数

linux - 使用 tac 反向读取文件

linux - FreeBSD、GNU Linux 和 OpenSolaris 的主要优缺点是什么?

c - 在标准输入上使用 grep

php - 检测危险的 unix 命令行元字符

linux - 如何在文件夹层次结构中找到所有不同的贪婪文件后缀?

sed - grep + grep + sed = sed : no input files

regex - 抓取 '../'(点斜线)

linux - 配置 LDAP 时出现 Berkeley DB 不匹配错误

linux - 如何在 Azure Linux VM 上转移域和创建子域