2014-02-25 83 views
1

即時尋找一個bash腳本來算一個詞的出現次數在給定的目錄,它的這種模式子目錄中的文件:grep的多次出現給出了兩個字符串和兩個整數

^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嗎?

+2

對'grep'使用'-R'和'-c'選項進行遞歸而不使用'find'並計算沒有'wc'的匹配。 – Barmar

回答

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}適用於一切在括號中,而不僅僅是最後一個字符。

注意轉義(){},因爲我們需要雙引號",以便變量擴展爲grep正則表達式。

相關問題