grep 命令詳解
grep [選項] ‘模式’ 文件名
grep [參數] [選項] [操作對象]
grep ‘error’ -c 5 --color info.log
[模式]:是要搜索的字符串或正則表達式。
[選項]:是可選的,用于定制grep的行為。
[操作對象]:是要搜索的文件名或目錄名。
常用選項
-i:忽略大小寫。
-v:反向匹配,選擇不匹配的行。
-r 或 -R:遞歸搜索,不僅在當前目錄的文件中搜索,還在子目錄的文件中搜索。
-l:只輸出包含匹配行的文件名。
-n:顯示匹配行及其行號。
-c:只輸出匹配的行數。
-o:只輸出匹配的部分。
-A num:顯示匹配行之后的num行。
-B num:顯示匹配行之前的num行。
-C num 或 --context=num:顯示匹配行前后各num行。
-E 使用擴展正則,等價于egrep。
-f 文件:從文件中獲取模式。
–color 或 --colour:高亮顯示匹配部分。
普通正則表達式
^ :以某字符開頭
$ :以某字符結尾
. :匹配除換行符之外的任意單個字符
* :匹配前導字符的零次或者多次
[] :某組字符串的任意一個字符
[^] :取反
[a-z] : 匹配小寫字母
[A-Z] :匹配大寫字母
[a-z[A-Z]: 匹配字母
[0-9] :匹配數字
\ :轉義富符
() :分組
拓展正則表達式
{} :匹配的次數
{n} :匹配n次
{n,} :至少匹配n次
{n,m} :匹配n到m次
{,m} :最多匹配m次
+ :匹配至少一個或多次前導字符
? :匹配一個或者零個前導字符
| :或
正則與grep實戰
- 在info.log文件中,匹配含有’error’的行
grep 'error' info.log
- 統計在info.log文件中含有’error’的行數
grep 'error' info.log | wc -l
wc 命令詳解
wc(word count)命令是 Linux 和類 Unix 系統中的一個強大工具,用于統計文件中的行數、單詞數、字節數和字符數。通過不同的選項,用戶可以自定義統計的內容。wc 命令不僅適用于單個文件,還可以處理多個文件,并且可以通過管道從標準輸入讀取數據。
基本語法
wc [選項] [文件...]
常用選項
- -l 或 --lines:
統計文件的行數。
wc -l filename
- -w 或 --words:
統計文件的單詞數。單詞是指由空格、制表符或換行符分隔的非零長度字符序列。
wc -w filename
- -c 或 --bytes:
統計文件的字節數。字節數是指文件中所有字符占用的字節數。
wc -c filename
- -m 或 --chars:
統計文件的字符數。字符數是指文件中所有字符的數量,包括多字節字符。
wc -m filename
- -L 或 --max-line-length:
顯示文件中最長行的長度。
wc -L filename
- 無選項:
默認情況下,wc 命令會同時顯示行數、單詞數和字節數。
wc filename
用法示例
統計多個文件的行數:
wc -l file1 file2 file3
統計目錄下所有文件的行數:
wc -l *
統計目錄下所有 .txt 文件的行數:
wc -l *.txt
統計文件的行數并重定向輸出:
wc -l filename > line_count.txt
統計文件的單詞數并追加到另一個文件:
wc -w filename >> word_count.txt
統計多個文件的總行數:
wc -l file1 file2 file3 | awk '/total/ {print $1}'
統計文件中包含特定字符串的行數:
grep "keyword" filename | wc -l
統計文件中每行的平均單詞數:
wc -w filename | awk '{total_words=$1}' && wc -l filename | awk '{total_lines=$1; print total_words/total_lines}'
統計文件中每個單詞出現的次數:
tr ' ' '\n' < filename | sort | uniq -c | sort -nr
統計文件中每個字符出現的次數:
fold -w1 filename | sort | uniq -c | sort -nr
統計文件中每個單詞的長度:
tr ' ' '\n' < filename | awk '{print length, $0}' | sort -n
統計文件中每個單詞的長度分布:
tr ' ' '\n' < filename | awk '{print length}' | sort | uniq -c
統計文件中每個字符的類型(字母、數字、其他):
fold -w1 filename | awk '{if ($1 ~ /[a-zA-Z]/) print "Letter"; else if ($1 ~ /[0-9]/) print "Number"; else print "Other"}' | sort | uniq -c
實際應用示例
統計代碼行數:
統計某個項目中的代碼行數,排除空行和注釋行。
grep -vE '^\s*$|^#' codefile.c | wc -l
統計日志文件中的錯誤數量:
統計日志文件中包含 “ERROR” 的行數。
grep "ERROR" logfile.log | wc -l
統計文本文件中的唯一單詞數:
統計文本文件中的唯一單詞數。
tr ' ' '\n' < textfile.txt | sort | uniq | wc -l
統計多個文件的總字節數:
統計多個文件的總字節數。
wc -c file1 file2 file3 | awk '/total/ {print $1}'
統計目錄下所有文件的總單詞數:
統計目錄下所有文件的總單詞數。
wc -w * | awk '/total/ {print $1}'
統計文件中每個單詞的頻率:
統計文件中每個單詞的頻率,并按頻率降序排列。
tr ' ' '\n' < filename | sort | uniq -c | sort -nr
統計文件中每個字符的頻率:
統計文件中每個字符的頻率,并按頻率降序排列。
fold -w1 filename | sort | uniq -c | sort -nr
統計文件中每個單詞的長度分布:
統計文件中每個單詞的長度分布,并按長度升序排列。
tr ' ' '\n' < filename | awk '{print length, $0}' | sort -n
統計文件中每個單詞的長度分布:
統計文件中每個單詞的長度分布,并按長度升序排列。
tr ' ' '\n' < filename | awk '{print length}' | sort | uniq -c
統計文件中每個字符的類型:
統計文件中每個字符的類型(字母、數字、其他),并按類型分類。
fold -w1 filename | awk '{if ($1 ~ /[a-zA-Z]/) print "Letter"; else if ($1 ~ /[0-9]/) print "Number"; else print "Other"}' | sort | uniq -c
注意事項
- 文件大小:對于非常大的文件,wc 命令可能會消耗較多的內存和 CPU 資源。在這種情況下,可以考慮使用流式處理工具(如 awk)來優化性能。
- 權限問題:如果文件沒有讀取權限,wc 命令會報錯。確保你有適當的權限來讀取文件。
- 輸出重定向:使用 > 重定向輸出時,會覆蓋目標文件的內容。使用 >> 追加內容時,會在目標文件末尾添加內容。
- 多文件統計:當統計多個文件時,wc 命令會為每個文件單獨輸出統計結果,并在最后一行顯示總計。
總結
wc 命令是一個非常實用的工具,適用于多種文件統計場景。更靈活地使用 wc 命令來統計文件的行數、單詞數、字節數和字符數。無論是簡單的文件統計還是復雜的文本處理,wc 命令都能提供強大的支持。
管道符
管道符 “ | ” ,左邊的輸出結構,作為右邊的輸入。
統計info.log文件中ccf5928453f34df9出現的行數
grep 'ccf5928453f34df9' info.log | wc -l