在Linux系統(tǒng)中,文本是數(shù)據(jù)交互的“通用語(yǔ)言”——日志文件、配置文件、數(shù)據(jù)報(bào)表、程序輸出幾乎都以文本形式存在。手動(dòng)編輯文本不僅繁瑣,還容易出錯(cuò),而掌握Shell文本處理工具,能讓你用幾行命令完成批量篩選、數(shù)據(jù)提取、統(tǒng)計(jì)分析,甚至復(fù)雜的文本清洗。
今天就帶你盤(pán)點(diǎn)15個(gè)最常用的Linux文本處理工具,每個(gè)工具都附核心作用、常用選項(xiàng)和實(shí)戰(zhàn)場(chǎng)景,從基礎(chǔ)到進(jìn)階,看完就能直接上手!

一、基礎(chǔ)工具:文本操作的“基石”
這類(lèi)工具是文本處理的“入門(mén)必備”,解決最常見(jiàn)的“查看、統(tǒng)計(jì)、拼接”需求,用法簡(jiǎn)單但高頻使用。
1.cat:文本拼接與查看的“瑞士軍刀”
核心作用:查看文件內(nèi)容、拼接多個(gè)文件、創(chuàng)建簡(jiǎn)單文本文件。
常用場(chǎng)景:快速查看短文件、合并日志片段、往文件追加內(nèi)容。
實(shí)戰(zhàn)例子:
|
# 1.查看單個(gè)文件內(nèi)容
cat /var/log/xsc_syslog
# 2.合并2個(gè)日志文件到新文件
cat xsc_access.log xsc_error.log > xsc_combined.log
# 3.往文件末尾追加內(nèi)容(需謹(jǐn)慎,避免覆蓋)
cat >> xsc_config.conf << EOF
#新增配置項(xiàng)
timeout=300
EOF
|
2.head/tail:文件首尾內(nèi)容的“截取器”
核心作用:head查看文件開(kāi)頭(默認(rèn)前10行),tail查看文件末尾(默認(rèn)后10行),尤其適合大文件(如日志)。
常用選項(xiàng):
?-n N:指定查看N行(如-n 20查看前/后20行);
?tail -f:實(shí)時(shí)跟蹤文件更新(日志實(shí)時(shí)監(jiān)控必備)。
實(shí)戰(zhàn)例子:
|
# 1.查看nginx配置文件前15行(注釋和全局配置通常在開(kāi)頭)
head -n 15 /etc/nginx/xsc_nginx.conf
# 2.實(shí)時(shí)監(jiān)控tomcat日志(跟蹤最新錯(cuò)誤)
tail -f /usr/local/tomcat/logs/xsc_catalina.out
# 3.查看文件最后5行(日志的最新記錄)
tail -n 5 /var/log/xsc_auth.log
|
3.wc:文本統(tǒng)計(jì)的“計(jì)算器”
核心作用:統(tǒng)計(jì)文件的行數(shù)、單詞數(shù)、字節(jié)數(shù),是數(shù)據(jù)匯總的基礎(chǔ)工具。
常用選項(xiàng):
?-l:僅統(tǒng)計(jì)行數(shù)(最常用,比如“統(tǒng)計(jì)日志有多少條錯(cuò)誤”);
?-w:統(tǒng)計(jì)單詞數(shù);
?-c:統(tǒng)計(jì)字節(jié)數(shù);
?-m:統(tǒng)計(jì)字符數(shù)(支持中文等多字節(jié)字符)。
實(shí)戰(zhàn)例子:
|
# 1.統(tǒng)計(jì)當(dāng)前目錄下所有.sh腳本的總行數(shù)(代碼量估算)
wc -l xsc_*.sh
# 2.統(tǒng)計(jì)日志中包含"ERROR"的行數(shù)(錯(cuò)誤數(shù)量統(tǒng)計(jì))
grep "ERROR" xsc_app.log | wc -l
# 3.統(tǒng)計(jì)配置文件的字符數(shù)(檢查文件是否完整)
wc -m xsc_config.ini
|
二、篩選工具:精準(zhǔn)定位文本內(nèi)容
這類(lèi)工具幫你從海量文本中“撈取”關(guān)鍵信息,避免逐行查找的低效。
4.find:文件搜索的“定位雷達(dá)”
核心作用:按路徑、名稱(chēng)、類(lèi)型、時(shí)間、權(quán)限等條件搜索文件,是“找文件”的第一選擇。
常用選項(xiàng):
?-name "pattern":按文件名匹配(支持通配符,如xsc_*.log匹配所有帶前綴的日志文件);
?-type f/d/l:按文件類(lèi)型篩選(f =普通文件,d =目錄,l =軟鏈接);
?-mtime -N:按修改時(shí)間篩選(-7表示最近7天內(nèi)修改,+30表示30天前修改);
?-size +N:按文件大小篩選(+10M表示大于10MB,-50k表示小于50KB)。
實(shí)戰(zhàn)例子:
|
# 1.在/var/log目錄下找所有帶xsc_前綴的.log文件(日志文件匯總)
find /var/log -name "xsc_*.log" -type f
# 2.找當(dāng)前目錄下最近3天修改過(guò)的帶xsc_前綴的.sh腳本(定位近期編輯的腳本)
find . -name "xsc_*.sh" -type f -mtime -3
# 3.找大于100MB的帶xsc_前綴的日志文件(清理大文件前定位)
find /var/log -name "xsc_*.log" -type f -size +100M
|
5.grep:文本內(nèi)容的“搜索偵探”
核心作用:按正則表達(dá)式匹配文本內(nèi)容,從文件或輸出中篩選關(guān)鍵信息(如日志中的錯(cuò)誤、配置中的參數(shù))。
常用選項(xiàng):
?-i:忽略大小寫(xiě)(如grep -i "error"匹配ERROR/Error/error);
?-n:顯示匹配行的行號(hào)(定位具體位置);
?-v:反向匹配(顯示不包含指定內(nèi)容的行,如grep -v "#"過(guò)濾注釋?zhuān)?/span>
?-r:遞歸搜索目錄下所有文件(如grep -r "password" /etc/);
?-c:僅統(tǒng)計(jì)匹配行數(shù)(如grep -c "ERROR" xsc_app.log)。
實(shí)戰(zhàn)例子:
|
# 1.在nginx日志中找包含"404"的請(qǐng)求(定位頁(yè)面不存在的鏈接)
grep "404" /var/log/nginx/xsc_access.log
# 2.過(guò)濾配置文件中的注釋和空行(查看有效配置)
grep -v -E "^#|^$" /etc/xsc_sysctl.conf
# 3.遞歸搜索項(xiàng)目目錄中包含"TODO"的帶xsc_前綴的代碼文件(定位待辦事項(xiàng))
grep -r -n "TODO" /home/project/xsc_*.c
|
6.cut:按列提取文本的“手術(shù)刀”
核心作用:按列分割文本(默認(rèn)以制表符分隔,可指定分隔符),提取指定列的內(nèi)容,適合處理CSV、日志等結(jié)構(gòu)化文本。
常用選項(xiàng):
?-d "sep":指定分隔符(如-d ","處理CSV文件,-d ":"處理/etc/passwd);
?-f N:提取第N列(多列用逗號(hào)分隔,如-f 1,3提取第1和第3列);
?-c N:按字符位置提取(如-c 1-5提取前5個(gè)字符)。
實(shí)戰(zhàn)例子:
|
# 1.從/etc/passwd中提取用戶(hù)名和登錄Shell(第1列和第7列,冒號(hào)分隔)
cut -d ":" -f 1,7 /etc/xsc_passwd
# 2.處理CSV文件,提取姓名和年齡(第2列和第3列,逗號(hào)分隔)
cut -d "," -f 2,3 xsc_user.csv
# 3.提取日志中前10個(gè)字符(通常是時(shí)間戳)
cut -c 1-10 xsc_app.log
|
7.paste:多文件文本的“拼接膠”
核心作用:將多個(gè)文件的內(nèi)容按列拼接(默認(rèn)以制表符分隔),適合合并結(jié)構(gòu)化數(shù)據(jù)。
常用選項(xiàng):
?-d "sep":指定列分隔符(如-d ","合并為CSV格式);
?-s:按行拼接(將單個(gè)文件的多行合并為一行,用分隔符連接)。
實(shí)戰(zhàn)例子:
|
# 1.合并姓名文件和年齡文件(xsc_name.txt每行對(duì)應(yīng)xsc_age.txt每行)
paste -d "," xsc_name.txt xsc_age.txt > xsc_user_info.csv
# 2.將多列日志合并為一行(用空格分隔)
paste -s -d " " xsc_log1.log xsc_log2.log xsc_log3.log
|
三、處理工具:文本清洗與轉(zhuǎn)換的“利器”
這類(lèi)工具幫你完成文本的“加工”——去重、排序、替換、刪除,解決數(shù)據(jù)不規(guī)整的問(wèn)題。
8.sort:文本排序的“整理師”
核心作用:按指定規(guī)則對(duì)文本行排序,支持?jǐn)?shù)字、字母、日期等排序方式,常與uniq配合去重。
常用選項(xiàng):
?-n:按數(shù)字排序(默認(rèn)按字符排序,如“10”會(huì)排在“2”前面,-n可修正);
?-r:反向排序(從大到小/從Z到A);
?-k N:按第N列排序(需指定分隔符,如-t ":" -k 3n按第3列數(shù)字排序);
?-u:去重(等價(jià)于sort | uniq,但效率更高)。
實(shí)戰(zhàn)例子:
|
# 1.按數(shù)字排序(統(tǒng)計(jì)結(jié)果排序,如日志錯(cuò)誤次數(shù))
sort -n xsc_error_count.txt
# 2.按第2列數(shù)字反向排序(處理CSV文件,第2列是分?jǐn)?shù))
sort -t "," -k 2nr xsc_score.csv
# 3.排序并去重(統(tǒng)計(jì)唯一IP)
sort -u xsc_access_ip.txt
|
9.uniq:文本去重的“過(guò)濾器”
核心作用:去除連續(xù)重復(fù)的行(注意:非連續(xù)重復(fù)需先sort排序),還能統(tǒng)計(jì)重復(fù)次數(shù)。
常用選項(xiàng):
?-c:統(tǒng)計(jì)每行的重復(fù)次數(shù)(如uniq -c顯示“次數(shù)+內(nèi)容”);
?-d:僅顯示重復(fù)的行;
?-u:僅顯示不重復(fù)的行。
實(shí)戰(zhàn)例子:
|
# 1.統(tǒng)計(jì)日志中每個(gè)IP的訪問(wèn)次數(shù)(先排序再去重統(tǒng)計(jì))
sort xsc_access.log | cut -d " " -f 1 | uniq -c
# 2.顯示重復(fù)的配置項(xiàng)(定位冗余配置)
sort xsc_config.conf | uniq -d
# 3.顯示僅出現(xiàn)一次的內(nèi)容(定位唯一數(shù)據(jù))
sort xsc_data.txt | uniq -u
|
10.tr:字符轉(zhuǎn)換的“魔術(shù)師”
核心作用:字符替換、刪除、壓縮,支持單字符或字符集的轉(zhuǎn)換,語(yǔ)法簡(jiǎn)潔但功能強(qiáng)大。
常用選項(xiàng):
?tr "a" "b":將所有字符a替換為b;
?tr "[]" "[]":小寫(xiě)轉(zhuǎn)大寫(xiě)(反之同理);
?tr -d "a":刪除所有字符a;
?tr -s " ":壓縮連續(xù)的空格為單個(gè)空格(處理格式混亂的文本)。
實(shí)戰(zhàn)例子:
|
# 1.將日志中的小寫(xiě)字母轉(zhuǎn)為大寫(xiě)(方便統(tǒng)一匹配)
cat xsc_app.log | tr "[]" "[]"
# 2.刪除文本中的所有標(biāo)點(diǎn)符號(hào)(清理純文本)
cat xsc_article.txt | tr -d "[]"
# 3.壓縮連續(xù)空格和換行(將多行文本整理為緊湊格式)
cat xsc_messy.txt | tr -s " n"
|
11.xargs:命令參數(shù)的“轉(zhuǎn)換器”
核心作用:將標(biāo)準(zhǔn)輸入(如find的輸出)轉(zhuǎn)換為命令參數(shù),解決“參數(shù)過(guò)長(zhǎng)”問(wèn)題(如rm $(find ...)可能報(bào)錯(cuò),find ... | xargs rm更安全)。
常用選項(xiàng):
?-n N:每次傳遞N個(gè)參數(shù)給命令(如-n 5每次處理5個(gè)文件);
?-I {}:指定占位符(替換為輸入的每個(gè)參數(shù),適合復(fù)雜命令)。
實(shí)戰(zhàn)例子:
|
# 1.批量刪除找到的臨時(shí)文件(避免參數(shù)過(guò)長(zhǎng))
find . -name "xsc_*.tmp" -type f | xargs rm -f
# 2.批量修改文件后綴(將xsc_*.txt改為xsc_*.md)
find . -name "xsc_*.txt" -type f | xargs -I {} mv {} {}.md
# 3.批量統(tǒng)計(jì).c文件的行數(shù)(每次處理2個(gè)文件)
find . -name "xsc_*.c" -type f | xargs -n 2 wc -l
|
四、進(jìn)階工具:復(fù)雜文本處理的“王牌”
這類(lèi)工具支持腳本化操作,能處理更復(fù)雜的文本邏輯——替換特定行、條件篩選、數(shù)據(jù)計(jì)算等。
12.sed:文本流編輯的“瑞士軍刀”
核心作用:按行處理文本(流編輯),支持替換、刪除、插入、追加等操作,適合批量修改文本。
常用語(yǔ)法(基本格式:sed '命令'文件):
?s/old/new/g:全局替換(將old替換為new,g表示全局,不加g僅替換每行第一個(gè));
?d:刪除指定行(如sed '3d' file刪除第3行,sed '/ERROR/d' file刪除包含ERROR的行);
?i:在指定行前插入(如sed '2i #新增注釋' file在第2行前插入注釋?zhuān)?/span>
?-i:直接修改文件(建議加備份,如-i.bak保留原文件為file.bak)。
實(shí)戰(zhàn)例子:
|
# 1.全局替換配置文件中的"old_ip"為"new_ip"(備份原文件)
sed -i.bak 's/old_ip/new_ip/g' xsc_config.conf
# 2.刪除日志中的空行和注釋行(清理日志)
sed -e '/^$/d' -e '/^#/d' xsc_app.log
# 3.在第5行后追加一行配置(如新增timeout)
sed '5a timeout=300' xsc_server.conf
|
13.awk:文本分析的“編程語(yǔ)言”
核心作用:按列處理文本,支持條件判斷、循環(huán)、計(jì)算,能完成復(fù)雜的數(shù)據(jù)分析(如統(tǒng)計(jì)、過(guò)濾、格式化),堪稱(chēng)“文本處理中的Python”。
基本語(yǔ)法:awk '條件{動(dòng)作}'文件(默認(rèn)以空格/制表符分隔列,$N表示第N列,$0表示整行)。
常用選項(xiàng):
?-F "sep":指定分隔符(如-F ","處理CSV,-F ":"處理/etc/passwd);
?-v var=val:定義變量(如-v sum=0定義求和變量)。
實(shí)戰(zhàn)例子:
|
# 1.統(tǒng)計(jì)日志中每個(gè)IP的訪問(wèn)次數(shù)(等價(jià)于sort+cut+uniq,但更簡(jiǎn)潔)
awk '{ip[$1]++} END{for(i in ip) print i, ip[i]}' xsc_access.log
# 2.篩選CSV文件中分?jǐn)?shù)大于80的行(第3列是分?jǐn)?shù))
awk -F "," '$3 > 80 {print $2, $3}' xsc_score.csv
# 3.計(jì)算文件第2列的總和(如統(tǒng)計(jì)所有文件的大小)
awk '{sum += $2} END{print "Total size:", sum, "KB"}' xsc_file_size.txt
|
14.diff:文件對(duì)比的“找茬專(zhuān)家”
核心作用:比較兩個(gè)文件的差異,顯示不同的行,常用于版本對(duì)比、配置變更檢查。
常用選項(xiàng):
?-u:生成統(tǒng)一格式的差異(便于閱讀和打補(bǔ)丁,diff -u old.conf new.conf);
?-r:遞歸比較目錄下所有文件(如diff -r dir1 dir2)。
實(shí)戰(zhàn)例子:
|
# 1.比較兩個(gè)配置文件的差異(查看修改內(nèi)容)
diff -u xsc_old_nginx.conf xsc_new_nginx.conf
# 2.遞歸比較兩個(gè)項(xiàng)目目錄的文件差異(定位代碼變更)
diff -r /home/project/xsc_v1 /home/project/xsc_v2
|
15.patch:文件補(bǔ)丁的“修復(fù)師”
核心作用:根據(jù)diff生成的差異文件(補(bǔ)丁),更新舊文件到新?tīng)顟B(tài),常用于代碼更新、配置同步。
常用語(yǔ)法:patch舊文件 補(bǔ)丁文件
實(shí)戰(zhàn)例子:
|
# 1.用diff生成的補(bǔ)丁更新舊配置文件
diff -u xsc_old.conf xsc_new.conf > xsc_conf.patch#生成補(bǔ)丁
patch xsc_old.conf xsc_conf.patch #應(yīng)用補(bǔ)丁
# 2.撤銷(xiāo)補(bǔ)丁(恢復(fù)到原文件)
patch -R xsc_old.conf xsc_conf.patch
|
五、工具組合實(shí)戰(zhàn):1+1>2的效率技巧
單個(gè)工具能力有限,但組合起來(lái)能解決90%的復(fù)雜文本問(wèn)題,以下是3個(gè)高頻組合場(chǎng)景:
場(chǎng)景1:日志錯(cuò)誤分析
需求:查找最近7天修改的nginx日志,統(tǒng)計(jì)其中“500錯(cuò)誤”的IP及其出現(xiàn)次數(shù),按次數(shù)降序排列。
命令組合:
|
find /var/log/nginx -name "xsc_access.log*" -type f -mtime -7
| xargs grep " 500 "
| awk '{print $1}'
| sort | uniq -c
| sort -nr
|
拆解:find找日志→xargs grep篩500錯(cuò)誤→awk提IP→sort+uniq統(tǒng)計(jì)次數(shù)→sort -nr按次數(shù)降序。
場(chǎng)景2:CSV數(shù)據(jù)清洗
需求:處理用戶(hù)CSV文件,篩選年齡大于25的用戶(hù),提取姓名和郵箱,按姓名首字母排序,去重后保存為新文件。
命令組合:
|
cut -d "," -f 2,3,5 xsc_user.csv #提取姓名(2)、年齡(3)、郵箱(5)
| awk -F "," '$2 > 25 {print $1 "," $3}' #篩年齡>25,保留姓名+郵箱
| sort -t "," -k 1 #按姓名排序
| uniq #去重
> xsc_filtered_user.csv
|
場(chǎng)景3:批量文件處理
需求:在項(xiàng)目目錄中找所有.c文件,刪除其中的“TODO”注釋行,備份原文件。
命令組合:
|
find /home/project -name "xsc_*.c" -type f
| xargs sed -i.bak '/TODO/d'
|
拆解:find找.c文件→xargs sed刪除TODO行,-i.bak備份原文件。
六、總結(jié):文本處理的“核心思維”
Linux文本處理的精髓在于“管道(|)+組合”——用管道將工具串聯(lián),讓前一個(gè)工具的輸出作為后一個(gè)工具的輸入,就能把復(fù)雜任務(wù)拆解成多個(gè)簡(jiǎn)單步驟。
?「找文件」用find,「找內(nèi)容」用grep;
?「按列處理」用cut/awk,「排序去重」用sort/uniq;
?「批量修改」用sed/xargs,「復(fù)雜計(jì)算」用awk。
建議從日常場(chǎng)景入手(比如分析日志、整理數(shù)據(jù)),慢慢積累自己的“命令模板”。熟練后,你會(huì)發(fā)現(xiàn):原來(lái)用Shell處理文本,比打開(kāi)Excel或?qū)?/span>Python腳本快得多!
-
嵌入式
+關(guān)注
關(guān)注
5198文章
20442瀏覽量
333976 -
Linux
+關(guān)注
關(guān)注
88文章
11758瀏覽量
219006 -
Shell
+關(guān)注
關(guān)注
1文章
375瀏覽量
25372
發(fā)布評(píng)論請(qǐng)先 登錄
詳解Linux Shell文本處理工具
Linux Shell腳本入門(mén)到實(shí)戰(zhàn)詳解
使用 Linux/Unix 進(jìn)行文本處理
Python人工智能學(xué)習(xí)工具包+入門(mén)與實(shí)踐資料集錦
Python網(wǎng)頁(yè)爬蟲(chóng),文本處理,科學(xué)計(jì)算,機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘工具集
文本處理技巧之正則表達(dá)式
linux命令行與shell編程實(shí)戰(zhàn)
單日獲客成本超20萬(wàn),國(guó)產(chǎn)大模型開(kāi)卷200萬(wàn)字以上的長(zhǎng)文本處理
Linux中cut命令的實(shí)用示例
如何掌握Linux文本處理
Linux三劍客之Sed:文本處理神器
Linux中文本處理命令的用法
Linux Shell文本處理神器合集:15個(gè)工具+實(shí)戰(zhàn)例子,效率直接翻倍
評(píng)論