linux上文本處理三劍客
grep,egrep,fgrep:文本過濾工具(模式:pattern)工具:
grep:基本正則表達式,-E:支持擴展正則表達式,-F:不支持正則表達式
egrep:擴展正則表達式,-G:支持基本正則表達式 ,-F:不支持正則表達式
fgrep:不支持正則表達式,-E.-G
sed:stream editor,流編輯器;文本編輯工具
awk:linux實現為gawk,文本報告生成器(格式化文本);
正則表達式:(regual expression,REGEXP)由一類特殊字符及文本字符所編寫的模式,其中有些字符不表示其字面意義,
而是用于表示控制或通配的功能;主要分兩類:
基本正則表達式:BRE
擴展正則表達式:ERE
元字符:什么是元字符呢,這個像天書一樣的東西就是元字符–>\(hello[[:space:]]\+\)\+
grep:
作用:文本搜索工具,根據用戶指定的“模式(過濾條件)”對目標文本逐行進行匹配檢測;打印匹配到的行;
模式:由正則表達式的元字符及文本字符所編寫出的過濾條件
grep
grep [OPTIONS] PATTERN [FILE…]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]
–color=auto:自動對匹配到的文本做著色,高亮顯示
-i:ignorecase:忽略字符大小寫
-o:僅顯示匹配到的字符串本身;
-v:顯示不能被模式匹配到的行
-E:支持使用擴展的則表達式元子符
-q:–quiet, –silent:靜默模式,既不輸出任何信息;
-A:后#行
-B:前#行
-C:前后各#行
基本正則表達式元字符
字符匹配:
.:匹配任意單個字符
[]:匹配指定范圍內的任意單個字符
[^]:匹配指定范圍外的任意單個字符
[:digit:]數字
[:lower:]小寫字母
[:upper:]大寫字母
[:alpha:]所有大小寫字母
[:alnum:]所有字母和數字
[:punct:]所有標點符號
[:space:]所有空白字符
匹配次數:用在要指定其出現的次數的字符的后面,用于限制其前面字符出現的次數;默認工作于貪婪模式
*:匹配其前面的字符任意次;0;1;多次
.*:匹配任意長度的任意字符
\?:匹配其前面的字符0次或1次,即其前面的字符可有可無
\+:匹配其前面的字符1次或多次,即其前面的字符要出現至少1次
\{m\}:匹配其前面的字符m(指精確數字)次;
\{m,n\}:匹配其前面的字符至少m次,至多n次;
\{0,n\}至多n次
\{m,\}至少m次
位置錨定:
^:行首錨定;用于模式的最左側
$:行尾錨定;用于模式的最右側
^PATTERN$:用PATTERN來匹配整行
^$:空白行
^[[:space:]*]$:空行或包含空白字符的行
單詞錨定(單詞:非特殊字符組成的連續字符(字符串)都稱為單詞)
\<或\b:詞首錨定,用于單詞模式的左側
\>或\b:詞尾錨定,用于單詞模式的右側
\<PATTERN\>:匹配完整單詞;
分組及引用
\(\):將一個或多個字符捆綁在一起,當成一個整體進行處理,如: \(xy\)*ab
分組:括號中的模式匹配到的內容會被正則表達式引擎自動記錄于內部的變量中,這些變量為:
\1:模式從左側起,第一個左括號以及與之匹配到的右括號之間的模式所匹配到的字符;
\2:模式從左側起,第二個左括號以及與之匹配到的右括號之間的模式所匹配到的字符;
\3:模式從左側起,第三個左括號以及與之匹配到的右括號之間的模式所匹配到的字符;
]#:grep "\(l..e\).*\1" lovers.txt
后向引用:引用前面的分組括號中的模式所匹配到的字符
egrep:支持擴展正則表達式實現類似與grep文本過濾功能;grep -E
grep [OPTIONS] PATTERN [FILE…]
–color=auto:自動對匹配到的文本做著色,高亮顯示
-i:ignorecase:忽略字符大小寫
-o:僅顯示匹配到的字符串本身;
-v:顯示不能被模式匹配到的行
-E:支持使用擴展的則表達式元子符
-q:–quiet, –silent:靜默模式,既不輸出任何信息;
-A:后#行
-B:前#行
-C:前后各#行
-G: 表示支持基本正則表達式
擴展正則表達式的元字符
字符匹配
.:任意單個字符
[]:指定范圍內的任意單個字符
[^]:指定任意范圍外的任意單個字符
[:digit:]數字
[:lower:]小寫字母
[:upper:]大寫字母
[:alpha:]所有大小寫字母
[:alnum:]所有字母和數字
[:punct:]所有標點符號
[:space:]所有空白字符
次數匹配
*:任意次,0,1或多次
?: 0次或1次;表示其前的字符可有可無
+:其前字符至少1次;表示一次或多次
{m}:其前的字符m次
{m,n}:至少m次,至多n次
{0,n}:至多n次
{m,}:至少m次
位置錨定:
^:行首錨定
$:行尾錨定
\<或者\b:詞首錨定
\>或者\b:詞尾錨定
分組及引用
():分組;括號內的模式匹配到的字符會被記錄于正則表達式引擎內部的變量中;
后向引用:\1,\2,…
或:
a|b:a或者b;整個左側或者右側
C|cat:C或者cat
(c|C)at:cat或者cat
文本查看工具
cat:more: less:head:tail:
cat:
-n:加行號
-b:空行不加行號
-ns:把壓縮重復的空行僅僅顯示一行
-v:顯示windows的^M號
-t:顯示tab符
tac:和cat相反顯示
rev:反向顯示每一個行的每個字符
more:分頁顯示,less更便捷
less:可以一頁頁的翻,上下都可以,也可以搜索關鍵字
-/關鍵字:搜索關鍵字
n/N:向下和向上搜索
?。褐С謘hell命令,可以在輸入!后輸入shell命令
head:顯示頭10行(默認)
-n#:-n3(顯示前3行
tail:顯示后10行(默認)
-n#:-n3(顯示后3行)用來看日志用到比較多
-c#(-c10)只顯示最后的10個字節
-f:不會在顯示信息之后自動退出, 跟蹤顯示文件新追加的內容,常用日志監控
tail -f /var/log/messages
tail -n0 -f /var/log/messages &
此命令只顯示新的日志信息,而且還可以繼續操作其他命令
必須使用fg 1 ctrl+c 才能終止后臺
文本處理工具
wc,cut,sort,uniq,diff,patch
wc:word count:單詞統計
-l:僅顯示行數
-w:僅顯示單詞數
-c:僅顯示字節數
-m:僅僅顯示字符數
示例
[root@ali ~]# netstat -nt(此命令顯示當前系統的網絡鏈接狀態,可以結合wc命令得出行數,單詞數,字節數)
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.1.253.109:22 10.1.250.14:51155 ESTABLISHED
[root@ali ~]# netstat -nt |wc
3 19 219 (左側3表示行數,19表示單詞數,219表示字節數)
cut:以列切割
-d CHAR:以指定的字符為分隔符
-f FIELDS:挑選出的字段
#:指定的單個字段
#-#:連續的多個字段
#,#:離散的多個字段
示例(1)
[root@ali ~]# cat /etc/passwd | cut -d: -f1,3,7
root:0:/bin/bash
bin:1:/sbin/nologin
命令解析:cat /etc/passwd 然后通過管道給cut -d: -f1,3,7:以冒號為分割符,列出第1,3,7列
示例(2)
[root@ali ~]# ifconfig |cut -d: -f2 |cut -d' ' -f1 |head -2 |tail -1
10.1.253.109
命令解析:使用cut和head,tail結合取出ifconfig中的ip地址
paste 合并兩個文件同行號的列到一行
-d分隔符:指定分隔符,默認TAB
-s:所有行合并成一行顯示
paste f1 f2
paste -s f1 f2
sort:排序
-n:基于數值大小排序,而非字符進行排序
-t CHAR:指定分隔符
-k #:用于排序比較的字段
-r:逆序排序
-f:忽略字符大小寫
-u:重復的行只保留一份;
uniq:報告和移除重復的行
-c:顯示每行的重復次數
-u: 僅顯示未曾重復過的行
-d: 僅顯示重復過的行
示例
cat /etc/init.d/functions |tr -cs '[[:alpha:]]' '\n' |uniq -cd
命令解析:cat查看文件管道給tr -cs把所有字母以外的全部替換成換行,然后給uniq -cd
僅僅顯示重復過的行和重復的次數,找出/etc/init.d/functions每個單詞重復的次數。
diff:找出兩個文件的不同點,并且生成補丁
diff [選項] 源文件 目標文件
生成補丁
diff/path/to/oldfile /path/to/newfile > /path/to/patch_file
-u:使用unfied機制,即顯示要修改的行的上下文,默認認為3行,可以使用-c定義為多少行
示例:顯示出了不同行的上下各3行
[root@ali ~]# diff -u f1 f1.new
— f1 2016-08-04 07:01:29.302813685 +0800
+++ f1.new 2016-08-04 07:02:10.501812744 +0800
@@ -1,6 +1,6 @@
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 82438832 3739076 74505452 5% /
-tmpfs 502068 224 501844 1% /dev/shm
+tmpfs i am fi.new 502068 224 501844 1% /dev/shm
/dev/sda1 194241 34079 149922 19% /boot
/dev/sda3 20027260 45504 18957756 1% /testdir
/dev/sr0 3824484 3824484 0 100% /media/CentOS_6.8_Final
patch:向文件打補丁
patch[options] -i /path/to/patch_file /path/to/oldfile
也可以是使用輸入重定向方法
patch/path/to/oldfile < /path/to/path_file
原創文章,作者:M20-1馬星,如若轉載,請注明出處:http://www.www58058.com/29821