2
A
回答
3
另一個選項,使用Perl,是:
perl -e 'while(<>){$c+=tr/|/|/};print "$c\n"' *
在非一個班輪格式是:
while(<>){
$c += tr/|/|/
}
print "$c\n"
的while(<>){
行是Perl的魔力來自於命令或STDIN
文件中讀取行。你過一會兒就習慣了。該行本身進入一個名爲$_
的變量,該變量是許多Perl命令的默認參數。例如tr
,其工作方式與tr(1)
相似,默認爲在$_
上運行。我將我的結果放入一個名爲$c
的全局變量中。 (在完整程序中,最好將其聲明爲循環外部的my $c = 0;
的詞法變量。)+=
運算符將tr
命令的結果(此例中爲管道字符數)與當前值$c
相加。
只要使用tr(1)
顯然是一個更簡單的選項。 ;-)
使用*.*
是DOSism,您不希望在類UNIX平臺上使用DOSism。
使用單引號避免讓shell解釋管道字符的讀取好一點。舉例來說,我測試了我的答案是:
$ echo '||||
|||||' | perl -e 'while(<>){$c+=tr/|/|/};print "$c\n"'
9
-3
10
您可以使用tr(1)
刪除所有非管道字符,然後用wc(1)
一共拿到:
cat *.* | tr -d -c '|' | wc -c
6
這是違反直覺的,但在大多數UNIX正則表達式,逃避|
使得它或運營商。所以你的線路實際上是匹配「什麼也沒有」(你可以通過在任何一邊添加一些替代品來測試這一點)。只需使用
grep -c "|" *.*
其次,grep對行進行計數,而不是字符出現次數。你可以使用不同的工具;或者,如果你堅持grep,你可以把每個「|」在自己的路線上。例如,對於SED:
sed 's/|/|\n/g' *.*
注意:如果使用SED,我勸測試的很多以確保它做什麼,你認爲它。我需要那時。
最後,結合成份:
cat *.* | sed 's/|/|\n/g' | grep -c "|"
不幸的是,這可能不是爲你工作,因爲你很可能不使用UNIX(因爲*.*
的)。但希望能解釋這個問題,我總覺得這個問題令人奇怪地讓人放心。
0
如果你想找到一些管道,然後
fgrep -o "|" | wc -l
如果你想找到一些與至少一個管道線,然後
fgrep -c "|"
相關問題
- 1. Git Grep =>爲什麼`git grep -h`不能用於Unix管道?
- 2. 我怎麼能知道一個Perl的IO ::管
- 3. 什麼是grep管道的輸出
- 4. 我怎麼能知道的信號
- 5. 我怎麼能知道的AppDelegate
- 6. 我怎麼能呼應詹金斯管道腳本版本號
- 7. PHP shell_exec不能使用grep和管道
- 8. 我怎麼能知道我的數據適合內存
- 9. 我怎麼能在劍道UI電網
- 10. 我怎麼能知道一個PrintWriter
- 11. 我怎麼能在劍道UI
- 12. 我怎麼能知道在Linux上
- 13. 管道grep grep後保留着色
- 14. 我怎樣才能得到grep管道通過tac返回值而不殺死php exec()函數中的進程?
- 15. 我怎麼能排除grep的一些話會導致
- 16. Dmesg命令管道它grep
- 17. Vim內部(用管道)grep
- 18. 從grep和管道mkdir
- 19. 使用grep和管道
- 20. 我怎麼用grep某些日誌行
- 21. 我怎樣才能阻止寫入管道重新配置管道?
- 22. 我怎麼能知道mongo數據未使用的空間
- 23. Linux:我怎麼能grep文本從字符串到字符串
- 24. 爲什麼我不能(或者我怎麼能)用管道保存brew醫生的輸出?
- 25. 我怎麼能知道PowerShell的功能被忽略了
- 26. 性能瓶頸 - Linq到SQL或數據庫 - 我怎麼知道?
- 27. 我怎麼能知道我的網站包含惡意代碼
- 28. 管道AWK輸出到grep的
- 29. 管道grep給太多的結果
- 30. 從grep管道的文件名到頭
你真的想「* 。*「?這將排除名稱中沒有點的文件。 – 2009-03-05 13:12:17