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

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