如何将文件传输到`egrep`?

时间:2016-06-15 00:04:58

标签: unix terminal grep

我正试图了解如何使用egrep计算文件中某些内容的出现次数。

如果我有这样的文件,名为myfile

commas and stuff
more things

然后我可以计算第一个中的o的数量,如:

head myfile | egrep -c "o" myfile

出于某种原因,我无法用管道做到这一点。如果我有一个名为mypipes的文件:

| my | pipes |

我试过了:

head mypipes | egrep -c "|" mypipes

这给了我一个错误empty sub(expression),所以我尝试了以下内容:

head mypipes | egrep -c "\|" mypipes

这给了我一个“1”的值,这显然是错误的。

我该如何正确地做到这一点?一个完整的解释而不是一次性解决方案将是惊人的。感谢。

2 个答案:

答案 0 :(得分:1)

从手册:

-c, --count
      Suppress  normal output;
      instead print a count of matching lines for each input file.

你计算的是行,而不是字符。

egrep -o '\|' | wc -l

注意:您要么输入输入(例如:管道),要么指定要搜索的文件。为什么要同时执行这两项操作?

答案 1 :(得分:0)

在您构建的示例中,无需将数据传输到egrep,因为您已经告诉它直接从文件中读取数据。

如果您没有提供文件名,egrep将从STDIN读取:

head mypipes | egrep -c "\|"

至于你的其他问题......

  

这给了我一个" 1"的值,这显然是错误的。

是吗? egrep -c计算匹配的行数,在本例中为1。

如果您想计算出现次数,忽略行,这可能会有所帮助:Count total number of occurrences using grep