2016-06-15 64 views
-1

我試圖弄清楚如何使用egrep來統計文件中某些事件的發生。如何將文件導入`egrep`?

如果我有這樣一個文件,叫myfile

commas and stuff 
more things 

那麼我就能夠通過計算O公司的數量在第一,如:

head myfile | egrep -c "o" myfile 

出於某種原因,我無法用管道做到這一點。如果我有這樣一個名爲mypipes

| my | pipes | 

我嘗試這樣做:

head mypipes | egrep -c "|" mypipes 

這給了我一個錯誤empty sub(expression),所以我嘗試了以下內容:

head mypipes | egrep -c "\|" mypipes 

這使我的值是「1」,這顯然是錯誤的。

如何正確執行此操作?一個完整的解釋而不是一次性的解決方案將是驚人的。謝謝。

+1

你到底想幹什麼? '頭'沒有意義。 –

+0

請注意,當您在其命令行中指定文件名時,egrep會忽略其標準輸入。 Thie'egrep -c o myfile'使'egrep'直接讀取'myfile'並忽略其標準輸入。你可以通過指定''''文件名'或使用'/ dev/stdin'來讀取標準輸入。因此:'egrep -c o myfile -'或'grep -Ec或myfile/dev/stdin'。沒有指定文件,它讀取標準輸入 - 這是Unix命令的「過濾器」成語。 –

回答

1

從手冊:

-c, --count 
     Suppress normal output; 
     instead print a count of matching lines for each input file. 

你正在計算行,而不是文字。

egrep -o '\|' | wc -l 

注意:你要麼喂輸入(例如:管),或指定要在搜索的文件你爲什麼這樣做既?

+0

考慮使用grep代替egrep來創建更簡單的正則表達式:'grep -o'|' mypipes | wc -l'。 – John1024

0

在你構建的例子,也沒有必要管數據egrep,因爲你已經告訴它直接從文件中讀取。

如果不提供文件名,egrep會從標準輸入,而不是閱讀:

head mypipes | egrep -c "\|" 

至於你的其他問題......

這讓我想起了「1」的值,這顯然是錯誤的。

是嗎? egrep -c數相匹配的行數,在這種情況下是1

如果你想數出現次數,忽略線,這可能幫助:Count total number of occurrences using grep