Linux下有很多文本處理工具,本文將介紹幾款比較常用的文本處理工具,比如對文本查看的工具:cat和less,文本截取工具:head和tail,按列抽取文本工具:cut,按關鍵字查詢文本工具:grep,下面將具體介紹各種工具的使用。
1、文本查看命令cat
用法: cat [OPTION]… [FILE]…
cat命令一次性顯示所有文本內容,也可以跟多個文件連起來顯示,但是不能分頁顯示。cat常與重定向符配合使用,實現簡單的文本編輯功能。cat可以跟一些選項實現不同的功能,如跟-n可以顯示文本的行數,-s可以壓縮連續的空行,具體選項如下:
-n,–number:對輸出的所有行編號
-b,–number-nonblank:對輸出的非空行編號
-s, –squeeze-blank:對空行進行壓縮,不輸出多余的空行
-v,–show-nonprinting:可以顯示文本中的特殊回車符,如win下的回車符(^M)
-E,–show-ends:顯示每行結束處的$符
-T,–show-tabs:顯示Tab制表符(^I)
-A,–show-all:顯示所有,相當于-vET的集合
與cat命令相反的tac命令可以倒序顯示文本內容,即文本的最后一行輸出顯示到第一行,文本的第一行輸出顯示到最后一行。rev命令可以將每行的文本內容倒序顯示。
應用舉例:
[root@liang7 /]# cat userlist user1:x:3000:3000::/home/user1:/bin/csh user2:x:3001:3001::/home/user2:/bin/csh user3:x:3002:3002::/home/user3:/bin/csh [root@liang7 /]# tac userlist user3:x:3002:3002::/home/user3:/bin/csh user2:x:3001:3001::/home/user2:/bin/csh user1:x:3000:3000::/home/user1:/bin/csh [root@liang7 /]# rev userlist hsc/nib/:1resu/emoh/::0003:0003:x:1resu hsc/nib/:2resu/emoh/::1003:1003:x:2resu hsc/nib/:3resu/emoh/::2003:2003:x:3resu
2、分頁顯示文本內容,more和less
more命令可以分頁顯示文本內容,并且最下面會顯示已看文本的百分比,但只能向下翻頁,不能往回翻頁,跟上-d選項后可以在最下面顯示幫助信息,less命令也是分頁顯示文本內容,但是less支持使用pgUp和pgDn鍵實現上翻頁和下翻頁,并且less的功能比more更多,支持更多的搜素方式,不僅可以向下搜,也可以向上搜。
more命令選項詳解:
-d:在最下面顯示友好的提示信息
-f:計算行數時,以實際上的行數計算,而非自動換行過后的行數,即長行不會被斷到下一行
-s:將多個連續的空行壓縮為一行顯示
-u:不顯示下劃線
-p:不滾屏,清屏并顯示文本
-NUM:指定每屏顯示的行數為 NUM
+NUM:從文件第 NUM 行開始顯示
+/STRING:從匹配搜索字符串 STRING 的文件位置開始顯示
more命令常用操作:
Enter鍵:先下n行,需要定義,默認為1行
Ctrl+f或空格鍵:向下滾動一屏
=:輸出當前行的行號
:f:輸出文件名和當前的行號
!命令:笤俑shell并執行命令
q:退出
less命令選項詳解:
-b:設置緩沖區大小
-e:當文件顯示結束后自動離開
-f:強制打開特殊文件
-g:只標注最后搜素的關鍵子
-i:忽略搜索時的大小寫
-m:顯示文本的百分比
-N:顯示每行的行號
-s:將多個連續的空行壓縮為一行顯示
less命令常用操作:
h:調出幫助信息
pgup:向上翻一屏
pudn或者空格鍵:向下翻一屏
d:向下翻半屏
u:向上翻半屏
g:回到文件的開頭
G:回到文件的尾部
j或回車鍵:向下翻一行
y或k:向上翻一行
less命令下搜索模式:
\pattern:向前搜索
?pattern:向后搜索
n:同搜索方向查找下一個匹配項
N:與搜索方向相反查找下一個匹配項
less命令下同時瀏覽多個文件:
打開方式1:傳遞多個參數給less以打開多個文件:less file1 file2…
打開方式2:正在瀏覽一個文件時,使用 :e 打開另一個文件,如下:
less file1
:e file2
當打開多個文件時,可以使用一下方式切換:
:p:瀏覽前一個文件
:n:瀏覽下一個文件
3、head命令
用法:head [OPTION]… [FILE]…
head命令顯示顯示一個文件的前幾行,默認顯示前10行,可以手動指定要顯示的行數或字數。
常用選項有:
-c:指定要顯示的字符數
-n:指定要顯示的行數
-NUM:指定顯示NUM行
4、tail命令
用法:tail [OPTION]… [FILE]…
tail命令顯示一個文件的最后幾行,默認顯示最后10行,也可以手動指定要顯示的行數或字數,常用于日志的跟蹤。
常用選項有:
-c:指定要顯示的字符數
-n:指定顯示的行數
-NUM:指定顯示最后NUM行
-f:查看文件尾部內容結束后不退出,跟隨顯示新增的行,常用于監視
例如:跟蹤一個日志文件,只顯示新增的內容,而不顯示已有的內容
]# tail -n 0 -f log.file& # “&”表示將此程序放到后臺執行
5、cut命令
cut [選項]… [文件]…
-c:按指定的列數顯示,如指定只顯示第幾列到第幾列的內容
-d:使用指定分界符代替制表符作為區域分界
-f:指定要顯示第幾個字段列的內容
指定范圍的方式有:
N 從第1 個開始數的第N 個字節、字符或域
N- 從第N 個開始到所在行結束的所有字符、字節或域
N-M 從第N 個開始到第M 個之間(包括第M 個)的所有字符、字節或域
-M 從第1 個開始到第M 個之間(包括第M 個)的所有字符、字節或域
應用練習:
(1)截取df命令下的磁盤使用率
[root@liang6 ~]# df | tr -s '[:space:]' | cut -d' ' -f5
(2)查出/tmp的權限,以數字方式顯示
[root@liang6~]# stat /tmp/ | head -4 | tail -1 | cut -d'(' -f 2 | cut -d'/' -f1
6、多個文件內容合并顯示
cat命令和paste命令都可以實現多個文件合并顯示,不同之處在于使用cat命令是縱向合并,即將兩個不同的文件首尾合并并顯示,而paste命令是橫向合并,即將兩個不同的文件合并且第一列顯示第一個文件,第二列顯示第二個文件,并且可以使用-d選項指定不同文件間的分割符,paste命令跟上-s選項后可以將每個文件顯示在一行輸出。
應用舉例:
[root@liang7 /]# paste passwdlist userlist user1:user1 user1:x:3000:3000::/home/user1:/bin/csh user2:user2 user2:x:3001:3001::/home/user2:/bin/csh user3:user3 user3:x:3002:3002::/home/user3:/bin/csh user4:user4 user4:x:3003:3003::/home/user4:/bin/csh user5:user5 user5:x:3004:3004::/home/user5:/bin/csh user6:user6 user6:x:3005:3005::/home/user6:/bin/csh user7:user7 user7:x:3006:3006::/home/user7:/bin/csh user8:user8 user8:x:3007:3007::/home/user8:/bin/csh user9:user9 user9:x:3008:3008::/home/user9:/bin/csh user10:user10 user10:x:3009:3009::/home/user10:/bin/csh [root@liang7 /]# paste -d @ passwdlist userlist user1:user1@user1:x:3000:3000::/home/user1:/bin/csh user2:user2@user2:x:3001:3001::/home/user2:/bin/csh user3:user3@user3:x:3002:3002::/home/user3:/bin/csh user4:user4@user4:x:3003:3003::/home/user4:/bin/csh user5:user5@user5:x:3004:3004::/home/user5:/bin/csh user6:user6@user6:x:3005:3005::/home/user6:/bin/csh user7:user7@user7:x:3006:3006::/home/user7:/bin/csh user8:user8@user8:x:3007:3007::/home/user8:/bin/csh user9:user9@user9:x:3008:3008::/home/user9:/bin/csh user10:user10@user10:x:3009:3009::/home/user10:/bin/csh [root@liang7 /]# paste -s passwdlist userlist user1:user1 user2:user2 user3:user3 user4:user4 user5:user5 user6:user6 user7:user7 user8:user8 user9:user9 user10:user10 user1:x:3000:3000::/home/user1:/bin/csh user2:x:3001:3001::/home/user2:/bin/csh user3:x:3002:3002::/home/user3:/bin/csh user4:x:3003:3003::/home/user4:/bin/csh user5:x:3004:3004::/home/user5:/bin/csh user6:x:3005:3005::/home/user6:/bin/csh user7:x:3006:3006::/home/user7:/bin/csh user8:x:3007:3007::/home/user8:/bin/csh user9:x:3008:3008::/home/user9:/bin/csh user10:x:3009:3009::/home/user10:/bin/csh
7、文本數據統計命令wc
wc命令可以統計出一個文件中包含的行數、字數、字節數,也可以單獨指定要統計的內容,常用選項如下:
-c:統計字節總數
-l:統計行數
-w:統計字數
-m:統計字符總數
8、列的排序命令sort
sort命令可以對指定的列進行排序,默認排序方式是以字母排序,常用選項如下:
-f:忽略字母的大小寫
-t:使用指定的分隔符
-k:指定那一列排序
-n:以數字順序排序
-r:倒序排序
-u:合并連續重復的行
9、合并相鄰的行命令uniq
uniq命令可以合并相鄰并且連續重復的行,常和sort命令配合使用,常用選項如下:
-c:顯示每行重復出現的次數
-d:只顯示合并之前重復的行
-u:只顯示合并之前不重復的行
10、diff命令和patch命令
diff命令可以比較兩個文件間文本的不同,并且可以將對比結果輸出到一個文件中,如果兩個文件中的一個文件丟失,可以利用對比結果輸出的文件和其中一個文件使用patch命令恢復另一個文件。
[root@liang7 /]# diff -u passwdlist userlist > diff.txt [root@liang7 /]# cat diff.txt --- passwdlist 2016-08-07 11:00:30.609998611 +0800 +++ userlist 2016-08-07 10:50:08.300009628 +0800 @@ -1,10 +1,10 @@ -user1:user1 -user2:user2 -user3:user3 -user4:user4 -user5:user5 -user6:user6 -user7:user7 -user8:user8 -user9:user9 -user10:user10 +user1:x:3000:3000::/home/user1:/bin/csh +user2:x:3001:3001::/home/user2:/bin/csh +user3:x:3002:3002::/home/user3:/bin/csh +user4:x:3003:3003::/home/user4:/bin/csh +user5:x:3004:3004::/home/user5:/bin/csh +user6:x:3005:3005::/home/user6:/bin/csh +user7:x:3006:3006::/home/user7:/bin/csh +user8:x:3007:3007::/home/user8:/bin/csh +user9:x:3008:3008::/home/user9:/bin/csh +user10:x:3009:3009::/home/user10:/bin/csh [root@liang7 /]# patch -b userlist diff.txt
11、grep命令
用法:grep [選項]… PATTERN [FILE]…
grep是一個文本搜素工具,可以支持正則表達式,后面跟上-E選項相當于egrep,支持擴展的正則表達式。
常用選項:
-v:顯示不能夠被pattern匹配到的行
-i:忽略大小寫
-n:顯示匹配的行號
-c:統計匹配的行數,即顯示查找到的內容有幾行
-o:僅顯示匹配到的字符串
-q:靜默模式,不輸出任何信息
-A NUM:顯示匹配到的字符串所在行的后續NUM行
-B NUM:顯示匹配到的字符串所在行的前NUM行
-C NUM:顯示匹配到字符串所在行的前后NUM行
-w:匹配單詞
-E:使用擴展正則表達式
12、正則表達式
正則表達式是由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能,正則表達式分為基本正則表達式(BRE)和擴展正則表達式(ERE)。
基本正則表達式元字符:
(1)字符匹配:
.:匹配任意單個字符
[]:匹配指定范圍內的任意單個字符,支持a-z的寫法,表示所有小寫字母
[^]:匹配指定范圍外的任意單個字符
\:表示轉義符
[:digit:]:匹配所有的數字
[:lower:]:匹配所有的小寫字母
[:upper:]:匹配所有的大寫字母
[:alpha:]:匹配所有的字母
[:alnum:]:匹配所有的數字或字母
[:space:]:匹配所有呈水平或垂直排列的空白字符
[:blank:]:匹配所有呈水平排列的空白字符
[:punct:]:匹配所有的標點符號
[:cntrl:]:匹配所有的控制字符
[:graph:]:匹配所有的可打印字符,不包括空格
[:print:]:匹配所有的可打印字符,包括空格
[:xdigit:]:匹配所有的十六進制數
(2)次數匹配
*:匹配前面字符的任意次,包括0次
.*:匹配任意長度的任意字符
\?:匹配其前面字符的0次或1次
\+:匹配其前面的字符至少一次
\{n\}:匹配其前面的字符的n次
\{m,n\}:匹配前面的字符至少m次,至多n次
\{,n\}:匹配前面的字符至多n次
\{n,\}:匹配前面的字符至少n次
(3)、位置錨定,即定位出現的位置
^:行首錨定,用于模式的最左側
$:行尾錨定,用戶模式的最右側
^PATTERN$:用于匹配整行
^$:匹配空行
^[:space:]*$:空白行
\<或\b:詞首錨定,用于單詞模式的左側
\>或\b:詞為錨定,用于單詞模式的右側
\<PATTERN\>或\bPATTERN\b;匹配整個單詞
(4)、分組匹配
\(\):將一個或多個字符捆綁在一起,當作一個整體處理,分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命令方式為:\1,\2 … \1表示從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符。
例如:\(string1\+\(string2\)*\)
\1表示:string1\+\(string2\)*
\2表示:string2
擴展正則表達式:
擴展正則表達式與基本正則表達式的表達方式基本一致,只不過擴展正則表達式在特定環境下不需要使用“\”符,例如匹配次數時,{m,n}與基本正則表達式中的\{m,n\}意思一樣。
另外,擴展正則表達式支持或判斷。
例如:a|b:表示a或者b
con(C|c)at:表示conCat或者concat
原創文章,作者:苦澀咖啡,如若轉載,請注明出處:http://www.www58058.com/30480