學習筆記–文本處理工具

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

(0)
苦澀咖啡苦澀咖啡
上一篇 2016-08-07
下一篇 2016-08-07

相關推薦

  • N25 – Week 5 blog

    1. 顯示當前系統上root, fedora或user1用戶的默認shell [root@dhcp-10-129-6-166 ~]# grep -E "root|fedora|user1" /etc/passwd | grep -o "[^…

    Linux干貨 2016-12-27
  • httpd應用舉例

    應用舉例1、基于用戶和組認證的方式訪問ftp         1、編輯配置文件/etc/httpd/conf/httpd.conf,并使用httpd -t 檢查語法,并systemctl reload httpd       &n…

    Linux干貨 2016-10-23
  • 磁盤管理

    linux的哲學思想:一切皆文件; 設備類型: 塊(block):隨機訪問,交換數據單位是“塊”; 字符(character):線性訪問,數據交換單位是“字符”; 設備文件:FHS /dev     設備文件:關聯至設備驅動程序;設備的訪問入口;       &nbsp…

    Linux干貨 2016-08-30
  • 方便實用的文件查找與壓縮

    在平時的運維工作當中通常會編輯某些文件,但時間久了,突然一下子記不起文件的名字,遇到的事情又很緊急,需要立馬去處理,而自己只知道那個文件部分的特征信息,我們需要在系統中去搜索自己想要的文件,那么有沒有辦法去實現呢,當然有,在我們的系統中,文件查找的工具有兩個,locate和find。那么下面來介紹這兩個工具的用法以及兩個工具之間的差別。 在我們linux系統…

    Linux干貨 2016-08-13
  • 馬哥教育網絡班20期+第2周課程練習

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示 文件管理命令:ls、cd、pwd、mkdir、rmdir、cp、rm.、mv、touch、cat、more、less、head、tail 1)ls命令:顯示目錄文件   -a 顯示所有文件,包括隱藏文件  ~]# ls -a /etc.  &n…

    Linux干貨 2016-06-23
  • Linux系統認知

    前言 在認識Linux系統之前先介紹下計算機的組成構造及其功能: 1,簡單來說計算機可以劃分為軟件系統和硬件系統: (1)軟件系統自不必說就是各種不同的程序,協助用戶更好地使用電腦。 (2)硬件系統指的是主機、顯示器、鼠鍵等硬件設備。 2,按馮諾依曼體系可將計算機按邏輯構成分為: (1)CPU(運算器、控制器)。運算器是數據處理裝置,用來完成對數據的算術運算…

    Linux干貨 2016-09-20
欧美性久久久久