too*_*oop 4 unix linux bash shell perl
是否有一个内置的命令来执行此操作,或者有任何人有运气的脚本吗?
我想要计算某个字符串(不是单词)出现在文件中的次数.这可以包括每行多次出现,因此对于具有2次或更多次字符串的行,计数应计算每次出现不仅计数1.
例如,使用此示例文件:
blah(*)wasp( *)jkdjs(*)kdfks(l*)ffks(dl
flksj(*)gjkd(*
)jfhk(*)fj (*) ks)(*gfjk(*)
Run Code Online (Sandbox Code Playgroud)
如果我想计算字符串的出现次数,(*)我希望计数为6,即第一行为2,第二行为1,第三行为3.请注意第2-3行中的那一行是如何计算的,因为有一个LF字符将它们分开.
更新:到目前为止响应很好!我能问脚本处理的转换(*)来\(*\)等?这样我就可以将任何所需的字符串作为输入参数传递,而不必担心需要对其进行哪些转换,因此它以正确的格式显示.
kev*_*kev 21
您可以使用基本的工具,如grep和wc:
grep -o '(\*)' input.txt | wc -l
Run Code Online (Sandbox Code Playgroud)
使用perl的"Eskimo kiss"操作符和-n开关在末尾打印总计.使用\Q...\E忽略任何元字符.
perl -lnwe '$a+=()=/\Q(*)/g; }{ print $a;' file.txt
Run Code Online (Sandbox Code Playgroud)
脚本:
use strict;
use warnings;
my $count;
my $text = shift;
while (<>) {
$count += () = /\Q$text/g;
}
print "$count\n";
Run Code Online (Sandbox Code Playgroud)
用法:
perl script.pl "(*)" file.txt
Run Code Online (Sandbox Code Playgroud)