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

时间:2014-02-25 00:39:26

标签: bash grep

我正在寻找一个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?

1 个答案:

答案 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正则表达式。