Bash Grep给定两个字符串和两个整数多次出现

Bash Grep给定两个字符串和两个整数多次出现,bash,grep,Bash,Grep,我正在寻找一个bash脚本,用于计算给定目录及其子目录文件中某个单词的出现次数,模式如下: ^str1{n}str2{m}$ 例如: str1= yo str2= uf n= 3 m= 4 比赛将是“Yoyofufuf” 但我和格雷普有麻烦 这就是我尝试过的 for file in $(find $dir) do if [ -f $file ]; then echo "<$file>:<`grep '\<\$str1\{$n\}\$str2\{$m\

我正在寻找一个bash脚本,用于计算给定目录及其子目录文件中某个单词的出现次数,模式如下:

^str1{n}str2{m}$
例如:

str1= yo
str2= uf
n= 3
m= 4
比赛将是“Yoyofufuf”

但我和格雷普有麻烦

这就是我尝试过的

for file in $(find $dir)
do
    if [ -f $file ]; then
     echo "<$file>:<`grep '\<\$str1\{$n\}\$str2\{$m\}\>'' $file | wc -l >" >> a.txt
    fi 
done
用于$中的文件(查找$dir)
做
如果[-f$file];然后

echo:@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 $ $dir=。 $str1=yo $str2=uf $n=3 $m=4 $cat youf 尤尤夫 $grep-r-c“^\($str1\)\{$n\}\($str2\){$m\}$”“$dir” /否:0 /你:1 /dir/youf:1 $grep-r-c“^\($str1\)\{$n\}\($str2\){$m\}$”“$dir”| grep-v”:0$” /你:1 /dir/youf:1 $ 另请注意,
$str1
$str2
需要放在括号内,以便
{m}
{n}
适用于括号内的所有内容,而不仅仅是最后一个字符


注意
()
{}
的转义,因为我们需要双引号
,以便变量被扩展为grep正则表达式。

使用
-R
-c
选项
grep
在不使用
查找
的情况下递归,并在不使用
wc
的情况下计算匹配项。