5

让我们以下面的内容为例

    This file is a test file 
    this file is used to count the word 'file' in this test file
    there are multiple occurrences of word file in some lines in this test file

我想计算上述内容中的“文件”一词。

我正在使用下面的 shell 命令

   cat $filename |  sed "s/_/new/g" | sed "s/$word/_/g" | tr -c -d _ |wc -c

可以还是有更好的想法..?

4

11 回答 11

9

使用 tr 分隔单词,然后使用 grep 和 wc 似乎是可能的:

tr -s ' ' '\n' < file.txt | grep file | wc -l
于 2012-08-06T16:40:32.450 回答
6
grep $word $filename -o | wc -l
于 2012-08-06T16:38:55.527 回答
5
grep -cow "$word" "$filename"

-c选项指定报告计数。

-o选项指定计算每次出现的次数,而不仅仅是匹配行的数量。

-w选项指定只计算单词匹配,即不计算部分匹配,例如“文件”或“配置文件”。

不幸的是,当您将和结合使用时,某些版本grep无法正常工作。如果你有这个错误,@Nykakin 的回答是一个很好的解决方法。-c-o

还要注意插值变量的正确引用。

于 2012-08-06T16:38:29.303 回答
1

我会在这里推荐最简单的方法,即:

grep -c "file" filename

我希望您严格搜索该单词并且没有前缀和后缀,然后将其修改如下:

grep -wc "file" filename
于 2015-12-22T02:46:12.080 回答
0
cat $filename | tr -s ' ' '\n' | grep -c $word
于 2012-08-06T16:42:14.313 回答
0

您可以全部完成,awk或者perl您绝对可以删除cat(sed 也可以处理文件名)。grep本身是不行的,因为它只会计算每行一个匹配项。

$ sed "s/_/new/g" delmememetest | sed "s/$word/_/g" | tr -c -d _ |wc -c
7
$ grep -c file delmememetest
3

让我们尝试另一种时髦的方法,让 grep 有用:

$ sed "s/${word:0:1}/\n&/g" delmememetest | grep -c "$word"
7

我在每个与搜索词的第一个字符相同的字符之前插入一个换行符。这样每行只有一个匹配不会干扰计数。如果您有最新版本的 GNU grep,则-o另一个答案中使用的选项将确保相同。

在任何情况下,请确保您匹配的模式不只是$word或具有相同根的单词也将匹配(或使用-w开关)。

于 2012-08-06T16:43:51.547 回答
0

使用 tr 命令的一些投票解决方案无法处理存在诸如“filefile”之类的链接词的情况。这是我使用 Perl 的解决方案:

perl -p -e s/file/file\\n/g $filename | grep -c file

-p 告诉 perl 运行一个循环并回显输出。-e 指定接下来是单行程序。

于 2013-01-26T01:02:03.417 回答
0

...我喜欢保持简单:

grep $string /file/name |wc -l

或者

cat /file/name |grep $string |wc -l
于 2014-01-06T20:32:23.747 回答
0

使用以下命令:-less fileName | grep wordToBeSearched | wc -l 这里 less 是你想使用的编辑器类型 如果你想使用 nano 编辑器,那么使用以下命令:- nano fileName | grep wordToBeSearched | wc -l 这里 wc 代表字数,-l 代表有这个词的行数。

于 2018-10-17T06:00:37.330 回答
0

我发现这是最简单的方法:

 grep -o "$word" "$file" | wc -w

中的-o选项grep指定计算每次出现的次数,而不仅仅是匹配行的数量。

中的-w选项wc是仅计算整个单词。

于 2019-03-12T19:24:27.937 回答
-2

编码:

   count=0;
    for i in `cat $filename`;
        do if [ $i == "file" ];
    then ((count++))fi $i; 
    done;
    echo $count;
于 2013-02-20T08:46:59.000 回答