让我们以下面的内容为例
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
这没关系还是更好的想法..?
答案 0 :(得分:9)
使用tr分隔单词然后grep和wc似乎是可能的:
tr -s ' ' '\n' < file.txt | grep file | wc -l
答案 1 :(得分:5)
grep -cow "$word" "$filename"
-c
选项指定报告计数。
-o
选项指定计算每次出现次数,而不仅仅是匹配行数。
-w
选项指定仅计算单词匹配,即不是部分匹配,例如“files”或“profiles”。
不幸的是,grep
与-c
合并时某些版本的-o
无效。如果您有这个错误,@ Nykakin的答案是一个很好的解决方法。
也要注意插值变量的正确引用。
答案 2 :(得分:4)
grep $word $filename -o | wc -l
答案 3 :(得分:1)
我建议这里最简单的方法是:
grep -c "file" filename
我希望你严格搜索那个单词,没有前缀和后缀,然后修改如下:
grep -wc "file" filename
答案 4 :(得分:0)
cat $filename | tr -s ' ' '\n' | grep -c $word
答案 5 :(得分: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
开关)。
答案 6 :(得分:0)
使用tr命令的一些投票解决方案无法处理像“filefile”这样的链接词的情况。这是我使用Perl的解决方案:
perl -p -e s/file/file\\n/g $filename | grep -c file
-p告诉perl运行一个循环并回显输出。 -e指定单行程序接下来。
答案 7 :(得分:0)
...我想保持简单:
grep $string /file/name |wc -l
或
cat /file/name |grep $string |wc -l
答案 8 :(得分:0)
使用以下命令:- 更少的文件名| grep wordToBeSearched | wc -l 这里要使用的编辑器类型较少 如果您想使用nano编辑器,请使用以下命令:- 纳米文件名| grep wordToBeSearched | wc -l 这里wc代表单词计数,-l代表具有该单词的行数。
答案 9 :(得分:0)
我发现这是最简单的方法:
grep -o "$word" "$file" | wc -w
-o
中的grep
选项指定对每次出现进行计数,而不仅仅是匹配行数。
-w
中的wc
选项仅计算整个单词。
答案 10 :(得分:-2)
代码:
count=0;
for i in `cat $filename`;
do if [ $i == "file" ];
then ((count++))fi $i;
done;
echo $count;