Bash Grep给定两个字符串和两个整数多次出现
我正在寻找一个bash脚本,用于计算给定目录及其子目录文件中某个单词的出现次数,模式如下: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\
^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
的情况下计算匹配项。