search - results - linux wc




計算文件中某個模式的出現次數(即使在同一行上) (3)

嘗試這個:

grep "string to search for" FileNameToSearch | cut -d ":" -f 4 | sort -n | uniq -c

樣品:

grep "SMTP connect from unknown" maillog | cut -d ":" -f 4 | sort -n | uniq -c
  6  SMTP connect from unknown [188.190.118.90]
 54  SMTP connect from unknown [62.193.131.114]
  3  SMTP connect from unknown [91.222.51.253]

當搜索文件中字符串的出現次數時,我通常使用:

grep pattern file | wc -l

但是,由於grep的工作方式,每行只發現一次。 如何搜索字符串在文件中出現的次數,而不管它們是否在相同或不同的行上?

另外,如果我正在尋找正則表達式模式,而不是簡單的字符串呢? 我如何計算這些數據,或者甚至更好地打印每一場比賽的新線?


要計算所有事件,請使用-o 。 嘗試這個:

echo afoobarfoobar | grep -o foo | wc -l

man grep當然(:

更新

有些人建議只使用grep -co foo而不是grep -o foo | wc -l grep -o foo | wc -l

別。

這種快捷方式在任何情況下都不起作用。 手冊頁說:

-c print a count of matching lines

下面說明這些方法的不同之處:

1。

$ echo afoobarfoobar | grep -oc foo
1

只要在該行a{foo}barfoobar )中找到匹配a{foo}barfoobar ,搜索就會停止。 只有一行被檢查並匹配,所以輸出是1 。 其實-o在這裡被忽略,你可以使用grep -c代替。

2。

$ echo afoobarfoobar | grep -o foo
foo
foo

$ echo afoobarfoobar | grep -o foo | wc -l
2

因為我們明確要求查找每個出現-o ),所以在該行中找到了兩個匹配項( a{foo}bar{foo}bar )。 每個事件都被打印在一個單獨的行上,而wc -l只是計算輸出中的行數。


黑客grep的顏色功能,併計算它打印出多少顏色標籤:

echo -e "a\nb  b b\nc\ndef\nb e brb\nr" \
| GREP_COLOR="033" grep --color=always  b \
| perl -e 'undef $/; $_=<>; s/\n//g; s/\x1b\x5b\x30\x33\x33/\n/g; print $_' \
| wc -l




match