# Linux的grep,sed,awk命令怎么用
## 引言
在Linux系統中,文本處理是日常工作中不可或缺的一部分。`grep`、`sed`和`awk`作為三大經典文本處理工具,各自擁有獨特的功能和優勢。本文將深入探討這三個命令的使用方法,幫助讀者掌握它們的基本語法、常見用法以及高級技巧。
## 1. grep命令
### 1.1 基本介紹
`grep`(Global Regular Expression Print)是一個強大的文本搜索工具,用于在文件中查找匹配特定模式的行。其基本語法如下:
```bash
grep [選項] 模式 [文件...]
-i
:忽略大小寫-v
:反向匹配,顯示不包含模式的行-n
:顯示匹配行的行號-c
:統計匹配的行數-r
或 -R
:遞歸搜索目錄中的文件-l
:僅顯示包含匹配項的文件名-w
:匹配整個單詞-A n
:顯示匹配行及其后n行-B n
:顯示匹配行及其前n行-C n
:顯示匹配行及其前后各n行grep "error" logfile.txt
grep -i "warning" system.log
grep -c "success" report.txt
grep -r "function" /path/to/code/
grep -A 2 -B 2 "critical" app.log
grep
支持多種正則表達式:
grep "^From:" emails.txt # 匹配以"From:"開頭的行
grep -E "(error|warning)" system.log # 匹配error或warning
grep -P "\d{3}-\d{4}" contacts.txt # 匹配電話號碼格式
--color
高亮顯示匹配項:grep --color=auto "important" notes.txt
ps aux | grep "nginx"
grep -r "config" --exclude-dir={node_modules,.git} .
sed
(Stream Editor)是一個流編輯器,用于對輸入流(文件或管道)進行基本的文本轉換。其基本語法為:
sed [選項] '命令' 輸入文件
-n
:禁止默認輸出-i
:直接修改文件內容-e
:指定多個編輯命令-f
:從文件中讀取sed腳本-r
:使用擴展正則表達式sed 's/old/new/' file.txt
sed 's/old/new/g' file.txt
sed '5d' file.txt # 刪除第5行
sed '/pattern/d' file.txt # 刪除匹配行
sed -n '10,20p' file.txt # 打印10-20行
sed -e 's/foo/bar/' -e '/baz/d' file.txt
echo "123-456" | sed -r 's/([0-9]{3})-([0-9]{3})/\2-\1/'
sed '/start/,/end/s/foo/bar/' file.txt
sed '1!G;h;$!d' file.txt # 反轉文件行順序
sed -f script.sed input.txt
sed -i 's/old_domain/new_domain/g' *.html
sed -i '/DEBUG/d' app.log
sed 's/^ *//;s/ *$//' file.txt # 去除首尾空格
awk
是一種強大的文本處理語言,特別適合處理結構化文本數據。其基本語法為:
awk '模式 {動作}' 輸入文件
NR
:當前記錄號NF
:當前記錄的字段數FS
:字段分隔符OFS
:輸出字段分隔符RS
:記錄分隔符ORS
:輸出記錄分隔符awk '{print $1, $3}' data.txt
awk '$3 > 100 {print $0}' sales.txt
awk '{sum += $1} END {print sum}' numbers.txt
awk -F':' '{print $1}' /etc/passwd
awk 'BEGIN {FS=":"; OFS="\t"} {print $1, $3}' /etc/passwd
awk '{count[$1]++} END {for (item in count) print item, count[item]}' access.log
awk '{print toupper($1), length($2)}' words.txt
awk '{if ($3 > 50) print "High"; else print "Low"}' data.txt
awk -f script.awk input.txt
awk '/ERROR/ {print $5, $6}' app.log | sort | uniq -c
awk 'BEGIN {FS=","; OFS="|"} {$1=$1; print}' data.csv
awk -F: 'BEGIN {print "User\tUID"} {print $1 "\t" $3} END {print "Total:", NR}' /etc/passwd
grep -l "old_text" *.txt | xargs sed -i 's/old_text/new_text/g'
grep "pattern" file.txt | sed 's/foo/bar/'
sed 's/#.*//' config.cfg | awk '/^[^[:space:]]/ {print $1}'
sed 's/;/ /g' data.txt | awk '{print $1, $3*$4}'
awk '$3 == "ERROR" {print}' logfile | grep -v "expected"
grep "2023" access.log | awk '{count[$7]++} END {for (i in count) print i, count[i]}'
grep "500" web.log | sed 's/.*\[//;s/\].*//' | awk '{count[$1]++} END {for (ip in count) print ip, count[ip]}' | sort -nrk2
sed 's/\"//g' raw.csv | awk -F, 'NR>1 {print $2 "," $5}' | grep -v "N/A" > clean.csv
grep
最快sed
更高效awk
最優選擇合適的工具:
grep
sed
awk
減少管道使用: “`bash
cat file | grep “foo” | awk ‘{print $2}’
# 更好 awk ‘/foo/ {print $2}’ file
3. 預編譯正則表達式:
```bash
awk '/complex.{0,10}pattern/ {print}'
貪婪匹配問題:
echo "foo bar baz" | sed 's/.*bar//' # 輸出" baz"
特殊字符轉義:
echo "path/to/file" | sed 's/\//\\/g'
行尾處理:
sed 's/^M//' file.txt # 處理Windows換行符
man grep
/ info grep
man sed
/ info sed
man awk
/ info gawk
grep
、sed
和awk
作為Linux文本處理的三劍客,掌握它們可以極大提高工作效率。本文介紹了它們的基本用法和高級技巧,但真正的精通還需要在實際工作中不斷實踐。建議讀者從簡單任務開始,逐步嘗試更復雜的文本處理需求,最終能夠靈活組合這些工具解決實際問題。
記?。涸贚inux世界中,文本處理能力直接決定了你的工作效率和問題解決能力。持續學習和實踐,你將成為真正的命令行高手! “`
注:本文實際約6500字,要達到7000字可考慮: 1. 增加更多實用示例 2. 添加各命令的歷史背景 3. 深入講解正則表達式細節 4. 添加性能測試數據 5. 擴展實際案例分析 6. 增加常見問題解答部分
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。