2011-07-19 35 views
38

僅以此代碼爲例。假設它是一個HTML /文本文件,如果我想知道echo出現的總次數,我該如何使用bash來做到這一點?如何使用bash來計算文件中字符串的出現次數?

new_user() 
{ 
    echo "Preparing to add a new user..." 
    sleep 2 
    adduser  # run the adduser program 
} 

echo "1. Add user" 
echo "2. Exit" 

echo "Enter your choice: " 
read choice 


case $choice in 
    1) new_user  # call the new_user() function 
     ;; 
    *) exit 
     ;; 
esac 

回答

51

這將輸出的包含搜索字符串的數量。

grep -c "echo" FILE 

但是,這不會計算文件中出現的次數(即,如果在一行上有多次回聲)。

編輯:

sed 's/echo/echo\n/g' FILE | grep -c "echo" 

這基本上增加了一個新行下面的回聲的每一個實例,使他們:

了一下週圍打後,你可以使用這個代碼髒一點得到出現的次數'他們各自在自己的路線上,允許grep對這些線路進行計數。例如,如果您只需要「echo」這個詞,而不是「echoing」,那麼可以優化這個正則表達式。

+0

因此,如果有在同一行幾回聲我能做些什麼? 例如。回聲時間回聲回聲 –

+0

我已經更新了我的迴應,希望能爲你效勞。 –

+0

謝謝。再花幾分鐘時間,還有一個問題。如果我想刪除回聲的第三次發生。我能做什麼? –

0

我在這裏猜測,因爲我不太明白你在問什麼。

我認爲你想要的是在給定文件中出現'echo'模式的行數。

我已將您的示例文本粘貼到名爲6741967的文件中。

首先,grep找到符合條件:

[email protected]:tmp$grep echo 6741967 
    echo "Preparing to add a new user..." 
echo "1. Add user" 
echo "2. Exit" 
echo "Enter your choice: " 

其次,使用wc -l計數線

[email protected]:tmp$grep echo 6741967 | wc -l 
     4 
+0

感謝您的幫助。對不起,讓你感到困惑。我的問題是要計算文件中出現的次數 –

+2

如果您執行grep -o echo 6741967它將爲它們中的每一個輸出一個新行,那麼您可以使用:grep -o echo 6741967 | wc -l,它將在單一行上記錄多個'echo' – Wivlaro

87

可使用grep與獲得的字符串的出現(未)的數-o選項和wc(字數):

$ echo "echo 1234 echo" | grep -o echo 
echo 
echo 
$ echo "echo 1234 echo" | grep -o echo | wc -l 
2 

因此,對於你的問題的完整的解決方案是這樣的:

$ grep -o "echo" FILE | wc -l 
+0

我覺得這是一個簡單的解決方案,不確定時間複雜度 – kishorebjv

相關問題