一、文本處理工具的分類:
查看全部內容:more、less、cat、tac、rev
截取文件內容:head 、tail
抽取文件內容:cut
抽取關鍵字:grep、egrep
合并兩個文件的內容:paste
下面我們分別來對個命令進行講解:
more:
特點:按屏顯示、只能向下翻頁
翻頁鍵:enter:向文件尾部翻一行;space:向文件尾部翻一屏幕
選項:
-#:可指定一屏顯示多少行
+#:從文件的第#行開始顯示
+/string:從匹配到string的行開始顯示
less:
特點:按屏顯示、可以向上、向下翻頁
翻頁鍵:enter:向文件尾部翻一行;space:向文件尾部翻一屏幕
k:向文件首部翻一行;b:向文件首部翻一屏幕
選項:/string,可以查看匹配到的字符串,N|n匹配上一個或下一個
cat:
特點:全部顯示
選項:
-n:顯示每一行的行號
-b:只顯示非空行的行號
-A:顯示左右內容包括控制符
-E:顯示行結束符
-s:壓縮連續的空行為一行
tac:
特點:相當于cat的取反,從下往上顯示
rev:cat輸出的結果,旋轉180度輸出。
根據下面輸出結果可以看出cat、tac、rev的區別
[root@localhost testdir]# cat a 1 2 3 4 5 6 7 8 9 10 abc [root@localhost testdir]# tac a abc 1 2 3 4 5 6 7 8 9 10 [root@localhost testdir]# rev a 01 9 8 7 6 5 4 3 2 1 cba
head:
-#:顯示文件的前#行
-c:顯示前N個字節
tail:
-#:顯示文件的后#行
-c:顯示后N個字節
-f:可以監聽文件或日志是否有更新
tail -n 0 -f /var/log/messages &
cut:
特點:可根據分隔符來分割匹配到的行
選項:
-d:指定分隔符
-f:指定要分割的列
-c:按字符切割 -c1-5 指定切割每行的前5個字符
–output-delimiter=sting :指定輸出分隔符
paste:
特點:合并兩個文件的同一行 到一行中顯示
選項:
-d:指定兩個文件的分隔符,默認時tab
-s:兩個文件,file1文件所有內容放到一行顯示,file2同file
root@cenots6.8 ~ # paste /etc/issue /etc/passwd CentOS release 6.8 (Final) root:x:0:0:root:/root:/bin/bash Kernel \r on an \m bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
root@cenots6.8 ~ # paste -s /etc/issue /etc/passwd CentOS release 6.8 (Final) Kernel \r on an \m root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:dae
grep:
特點:查找匹配到的關鍵字,支持正則表達式和擴展正則表達式
選項:
-o:只顯示匹配到的內容
-v:除了匹配到的內容,其他的內容都顯示
-E:擴展正則表達式
–color:匹配到的內容顯示紅色
-i:忽略大小寫匹配
-q:靜默模式,通常用戶shell腳本中,來判斷是否正常輸出,echo $?查看
-A#:顯示匹配到內容及后#行
-B#:顯示匹配到內容及前#行
-C#:顯示匹配到的內容及前后#行
-e:實現多個匹配選項的或關系
二、分析文本的工具
排序:sort
去重:uniq
統計數量:wc
比較文件:diff、patch
sort:
特點:文本排序后在屏幕上顯示出來
選項:
-n:按照數字大小排序
-t:指定分隔符
-k:指定排序的行默認正序
-r:逆序排序輸出的行
-u:刪除輸出重復的行(不相鄰重復的也算重復和uniq的區別)
-f:忽略字母大小寫
uniq:
特點:可以查看重復的次數,可以顯示重復的和不重復的內容
選項:
-c:在行首顯示該行重復的次數
-d:只顯示重復的行
-c:只顯示不重復的行
wc:
特點:可統計單詞數,字符數,行數
選項:
-l:顯示行數 –line
-c:顯示字節數 –char
-w:單詞數 –world
diff:
特點:可以比較兩個文本的不同,針對不同內容可以顯示出來或輸出到指定文件中當做補丁使用
選項: -u,為輸出內容定義統一的diff格式,用于打補丁
root@cenots6.8 /testdir # paste a b I am a I am b haha hello waht? waht? a b root@cenots6.8 /testdir # diff a b 1,2c1,2 # 1,2c1,2 表示a文件的第1行和第二行和b文件的第一行和第二行有不同 < I am a # “<”表示a文件的內容 < haha --- > I am b # “>”表示a文件的內容 > hello 4c4 < a --- > b
patch:
特點:配合diff命令用戶生成補丁文件
選項:-b,補丁文件的時候保留源文件
-i,源文件 補丁文件
不加-i,補丁文件,源文件
root@cenots6.8 /testdir # diff -u a b >c.patch root@cenots6.8 /testdir # cat c.patch --- a 2016-08-08 10:12:06.173647189 +0800 +++ b 2016-08-08 10:12:12.640741349 +0800 @@ -1,4 +1,4 @@ -I am a -haha +I am b +hello waht? -a +b
root@cenots6.8 /testdir # patch -b a c.patch # 將a文件補丁成b文件,并保存源文件 patching file a root@cenots6.8 /testdir # cat a I am b hello waht? b root@cenots6.8 /testdir # patch -i c.patch a # 讀取補丁從c.patch 輸入 和上述方法一致 patching file a # 只是參數位置不同 root@cenots6.8 /testdir # cat a I am b hello waht? b
root@cenots6.8 /testdir # patch -b a < c.patch # 將a文件恢復原樣 patching file a Reversed (or previously applied) patch detected! Assume -R? [n] y root@cenots6.8 /testdir # cat a I am a haha waht? a
三、正則表達式和擴展正則表達式
正則表達式功能非常強大,我們可以通過組合一些特殊字符或文本來匹配到我們需要的內容,有些程序功能之所以強大也因為其支持正則表達式,例如:grep、sed、vim等
根據元字符分類:
字符匹配:
[0-9]:匹配0-9之間任意一個數字
[a-z]:匹配aAbB……yYz之間任意一個字母
[A-Z]:匹配aAbB……yYz之間任意一個字母
[[:alpha:]]:匹配任意一個字母
[[:digit:]]:匹配任意一個數字
[[:alnum:]]:匹配任意一個數字或字母
[[:upper:]]:任意一個大寫字母
[[:lower:]]:任意一個小寫字母
[[:punct:]]:匹配任意一個符號
[[:space:]]:匹配任意一個空格或tab
\(ab\).*\1:匹配左面第一個()里面的內容
.:任意單個字符
次數匹配:
\{x,y\}:匹配至少x次,最多y次
\{x,\}:匹配至少x次
\{,y\}:匹配最多y次
\{x\}:匹配x次
\?:匹配0次或1次
\+:匹配至少1次
*:*前面的字符匹配任意次
位置錨定:
^:錨定行首
$:錨定行尾
\<或\b:錨定詞首
\>或\b:錨定詞尾
分組:
\(ab\)
其他:
[^]:非
\:某些具有特殊意義的字符在需要匹配的時候需要轉移
擴展正則表達式:
擴展正則表達式,除了元字符的區別外,還多了一個 “|” 命令
根據元字符分類:
字符匹配:
[0-9]:匹配0-9之間任意一個數字
[a-z]:匹配aAbB……yYz之間任意一個字母
[A-Z]:匹配aAbB……yYz之間任意一個字母
[[:alpha:]]:匹配任意一個字母
[[:digit:]]:匹配任意一個數字
[[:alnum:]]:匹配任意一個數字或字母
[[:upper:]]:任意一個大寫字母
[[:lower:]]:任意一個小寫字母
[[:punct:]]:匹配任意一個符號
[[:space:]]:匹配任意一個空格或tab
(ab).*\1:匹配左面第一個()里面的內容
.:任意單個字符
次數匹配:
{x,y}:匹配至少x次,最多y次
{x,}:匹配至少x次
{,y}:匹配最多y次
{x}:匹配x次
?:匹配0次或1次
+:匹配至少1次
*:*前面的字符匹配任意次
位置錨定:
^:錨定行首
$:錨定行尾
\<或\b:錨定詞首
\>或\b:錨定詞尾
分組:
(ab)
其他:
[^]:非
\:某些具有特殊意義的字符在需要匹配的時候需要轉移
|:
c | Cat :結果時c或Cat
(c|C)at:結果是cat 或Cat
原創文章,作者:Naruto,如若轉載,請注明出處:http://www.www58058.com/30868