Linux 中常用的文本(行)處理命令
0、正則表達式(regular expression)
元字符(如下圖)是正則表達式中含有的字符,在正則表達式中可以在字符串中使用元字符以匹配字符串的各種可能的情況。
注意:
(1) 在“[ ]”中還可以使用“-”來表示某一范圍。例如“[a-z0-9]”匹配任意的小寫字母或者數字,“[^A-Z]”表示非大寫字母,“[0-9]{8}”表示任意一個8位數字。
(2) 元字符還可以配合使用:
“.*”可以匹配任意個字符,如“r.*d”會匹配“rd”、“red”、“read”。
“.+”可以匹配任意的一個或者多個字符,如“r.+d”會匹配“red”、“read”,但不會匹配“rd”。
“.?”可以匹配任意的零個或一個字符,如“r.?d”會匹配“rd”、“red”,但不會匹配“read”。
“^$”匹配空白行。
(3) 在[ ]中還可以使用一些特殊匹配模式,如下表:

以“\”開頭得元字符
1、grep命令
命令說明:按行處理,輸出文件中包含搜索字符串的所有行。
格式:grep [-acinv] ‘搜索字符串’ filename
參數說明:
-a:在二進制文件中,以文本文件的方式搜索數據;
-c:計算找到“搜索字符串”的次數;
-i:忽略大小寫;
-n:輸出行號;
-v:反向選擇;
-E:擴展正則表達式例子:在文件a.txt中搜索包含字符串good或glad的行:
grep -E 'g(oo|la)d' a.txt
找到以字母a結尾的單詞:
grep -E 'a[[:blank]]' a.txt
grep -E 'a\\b' a.txt2、find命令
命令說明: 查找符合條件的文件
格式:find [path] [options][tests] [actions]
參數說明:
3、cut命令
命令說明:按行處理,將一行消息的某段切出來。格式:cut -d '分割字符' -f fields
cut -c m-n
例如: echo $PATH | cut -d ':' -f 3,5 ,取出環境變量PATH中的第3個和第5個路徑。
echo $PATH | cut -d ':' -f 3-5 ,取出環境變量PATH中的第3個到第5個路徑。
export | cut -c 12- , 將export中的每行的前面11個字符刪除留,保留從第12個字符開始的所有字符。
4、awk工具
命令說明: 將一行消息分成數個段來處理,適合處理小型的數據。
格式:awk '條件類型 {動作}' file
awk的內置變量:
$n:該行的第n個字段;
NF:每一行擁有的字段總數;
NR:當前行的行號;
FS:分隔符,默認為空格鍵;
例如: cat /etc/passwd | awk 'BEGIN {FS=":"} $S3<10 {print $1 "\t" $3}' ,打印passwd文件第三欄小于10的行的第1、3欄。
5、sed工具
命令說明: 分析STDIN的數據,將數據處理后,輸出到STDOUT。
格式:sed [-nefr] 動作
參數說明:
-n:安靜模式,僅顯示經過sed特殊處理的行;
-e:直接在命令行模式進行sed的操作編輯;
-f file:將sed操作寫在一個文件中;
-r:支持擴展正則表達式語法;
動作說明:[n1[, n2]] functions
其中,n1和n2代表“選擇進行操作的行數”,function有下面這些操作:
a:新增,
例如:
nl /etc/passwd | sed '2a Hello World'
,在
/etc/passwd第2行下面新增一行,寫入"Hello World"。
i:插入,例如:
nl /etc/passwd | sed '2i Hello World'
,在
/etc/passwd第2行上面新增一行,寫入"Hello World"
d :刪除,例如: nl /etc/passwd | sed '2,5d' ,刪除/etc/passwd中的第2至5行。
p :打印,例如: nl -n /etc/passwd | sed '2,5p' ,僅顯示2到5行,注意,如果不加-n,2到5行將重復輸出。
s :搜索,例如: nl /etc/passwd | sed '1,20s/old/new/g' ,將第1~20行中出現的所有字符串old替換為new。
6、sort命令
命令說明:將文本文件的內容按行排序。
格式:sort [-fbMnrtuk] [file or stdin]
參數說明:
-f:忽略大小寫;
-b :忽略最前面的空格;
-u :即uniq,重復行僅出現一次;
-M :以月份的名字來排序;
-n :使用“純數字”來排序;
-r :反向排序;
-t :分隔符,默認為tab鍵;
-k :按指定字段排序;例如: cat /etc/passwd | sort -t ':' -k 3 ,對文件/etc/passwd以第三欄排序。
7、uniq命令
命令說明:如果排序完成了,將重復的行僅顯示一次。注意,若文件未排序,該命令失效。
格式:uniq [-ic]
參數說明:
-i:忽略大小寫;
-c:統計每行重復的次數;
8、wc命令
命令說明:統計文本文件中有多少字,多少行,多少字符。格式:wc [-lwm]
參數說明:
-l:僅顯示行數;
-w:僅顯示字數(英文單詞個數);
-m:字符數;
9、tee命令
命令說明:雙向重導向,從標準輸入讀取數據,輸出到屏幕上,同時保存成文件。格式:tee [-a] file
參數說明:
-a:以累加的方式,將數據加入到file中。
例如: ls -al /home | tee ~/myfile | more ,將ls命令的數據存一份到myfile中,同時屏幕也有輸出數據。
10、tr命令
命令說明:單個字符的處理工具,可以用于刪除字符、替換字符等基本功能。更復雜的字符串處理工具通常使用sed。格式:tr [-ds] SET1....
參數說明:
-d:刪除,例如: cat file | tr -d '\r' ,相當于dos2unix命令所起的作用。
-s:替換字符,例如: cat file | tr -s [0-9] ,如果某個數字連續出現,僅保留第一個。
cat file | tr [a-z] [A-Z] ,將file中的小寫字符全部改為大寫。
11、col命令
命令說明:格式化顯示列。格式:col [-x]
參數說明:
-x:將tab鍵轉換成對等的空格鍵;
例如: cat -A /etc/man.config | col -x | cat -A ,使用cat -A,tab鍵會以^I顯示,經過col -x處理,tab替換為空格。
12、expand命令
命令說明:將tab鍵轉換成空格鍵。格式:expand [-t] file
參數說明:
-t n:后面可以接一個數字n,一個tab鍵替換為n個空格鍵,默認值為8。
13、join命令
命令說明:處理兩個文件中有相同數據的行,將它們加在一起。格式:join [-ti12] file1 file2
參數說明:
-i
:忽略大小寫;
-t:分隔符,默認為空格符;
-1 m
:指定file1用來比較的字段m,默認值為1;
-2 n
:指定file2用來比較的字段n,默認值為1;
命令說明:比較兩個文件的數據關聯性,直接將“兩行貼在一起”,中間以tab鍵隔開。
格式:paste [-d] file1 file2
參數說明:
-d:后面接分隔符,默認為tab鍵。
15、diff命令
命令說明:以
“行”
為單位進行文件比較,一般用在ASCII純文本文件。
格式:diff [-bBi] file1 file2
參數:
-b:忽略一行中有多個空白的差異;
-B:忽略空白行的不同;
-i:忽略大小寫;
16、cmp命令
命令說明: 以“位”為單位進行文件比較,可以比較二進制文件。格式:cmp [-s] file1 file2
參數:
-s:將所有不同點的位都列出來,默認僅輸出第一個發現的不同點;
17、patch命令
命令說明:diff old new > patch_file命令可以找出new文件與old文件不同的地方,然后用patch命令給old文件打上補丁,即與new文件相同了。格式:patch -pN < patch_file
參數:-pN表示取消N層目錄。
18、split命令
命令說明:將一個大文件拆分為幾個小文件。格式:split [-bl] fle
參數說明:
-b:拆分的文件大小,可加單位,如b, k, m等;
-l:按行數進行拆分;
例如: split -b 512k bigfile smallfile ,將文件bigfile按512K拆分,拆分后的文件依次為:smallfileaa、smallfileab等。
split -l 10 bigfile smallfile ,將文件bigfile中的每10行拆分成一個小文件。
19、xargs命令
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
