使用grep计算一个单词在文件中重复的次数

时间:2014-01-10 21:38:30

标签: bash shell grep

问题是这样的:

例如,我有一个文件“a.xml”。在这个文件中,它只是一行

<queue><item><cause><item>

我想知道<item>发生了多少次,在这种情况下它是2.

但是,如果我跑:

grep -c "<item>" a.xml 

它只会给我1,因为grep会在第一个<item>匹配后立即停止。

所以我的问题是如何使用简单的shell / bash命令返回<item>出现的次数?

看起来很简单但我找不到好的方法。有什么想法吗?

3 个答案:

答案 0 :(得分:9)

您可以尝试以下方式:

grep -o "<item>" a.xml | wc -l

答案 1 :(得分:3)

使用awk可以在一个命令中执行此操作:

awk -F '<item>' '{print NF-1}' a.xml

在线演示:http://ideone.com/vheDgq

要获取整个文件使用的总计数:

awk -F '<item>' '{s+=NF-1}END{print s}' a.xml

答案 2 :(得分:3)

如果你只想数'&lt;项&GT;”单独,然后我喜欢MillaresRoo的grep -o解决方案。如果您想更频繁地计算项目,请考虑:

$ sed 's/></>\n</g' a.xml | sort | uniq -c
      1 <cause>
      2 <item>
      1 <queue>

或者,在命令行上显式显示输入:

$ echo '<queue><item><cause><item>' | sed 's/></>\n</g' | sort | uniq -c
      1 <cause>
      2 <item>
      1 <queue>