我正在寻找一个bash脚本来计算给定目录中某个单词的出现次数以及它的子目录的文件:
^str1{n}str2{m}$
例如:
str1= yo
str2= uf
n= 3
m= 4
比赛将是“yoyoyoufufufuf”
但我遇到grep问题
这就是我所尝试的
for file in $(find $dir)
do
if [ -f $file ]; then
echo "<$file>:<`grep '\<\$str1\{$n\}\$str2\{$m\}\>'' $file | wc -l >" >> a.txt
fi
done
我应该使用find?
答案 0 :(得分:1)
@ Barmar的评论很有用。
如果我理解你的问题,我认为这个grep
命令应该能够满足您的需求:
grep -r -c "^\($str1\)\{$n\}\($str2\)\{$m\}$" "$dir"
请注意-r
和-c
的组合会导致grep
输出非匹配文件的零计数。如果需要,可以通过管道grep -v ":0$"
来抑制此输出:
$ dir=. $ str1=yo $ str2=uf $ n=3 $ m=4 $ cat youf yoyoyoufufufuf $ grep -r -c "^\($str1\)\{$n\}\($str2\)\{$m\}$" "$dir" ./noyouf:0 ./youf:1 ./dir/youf:1 $ grep -r -c "^\($str1\)\{$n\}\($str2\)\{$m\}$" "$dir" | grep -v ":0$" ./youf:1 ./dir/youf:1 $
另请注意,$str1
和$str2
需要放在括号中,以便{m}
和{n}
适用于括号内的所有内容,而不仅仅是最后一个字符。< / p>
请注意()
和{}
的转义,因为我们需要双引号"
,以便将变量扩展为grep正则表达式。