首页 > 解决方案 > grep:从子文件夹中的文件中搜索单词,但从匹配总数中排除给定单词

问题描述

我有一个名为folder. 在folder我有两个子文件夹subfolder1subfolder2.

这两个子文件夹都有相同的文本文件file.txt。该文本文件具有以下几行:

text
text
line
line
text text
text text

我试图用 grep 做的是获取单词的总数,text但从计数中排除text text单词。

如果我运行,grep -ro "text" folder/ | wc -l | xargs echo "total matches :"我会得到 12 的计数,但我要查找的结果是 4,因为这两个文件只有两个text单词,总共有 4 个。

我尝试grep -ro "text" -v "text text" folder/ | wc -l | xargs echo "total matches :"使用 -v 运行和许多其他语法以text text从计数中排除但没有成功。

标签: linuxgrepfile-search

解决方案


使用 awk 更容易实现,简而言之,您想打印(计数)“文本”仅出现一次的行:

  • 使用 "text"(-F "text") 作为字段分隔符
  • 当“text”是字段分隔符时,打印字段数为 2 的行。
awk -F "text" 'NF==2 { print}' folder/subfolder*/*| wc -l  | xargs echo "total matches :"
total matches : 4


推荐阅读