8.5文本處理工具及正則表達式

一、各種文本工具

    文件查看

    命令:cat,tac,rev

        cat optiong file

            -E:顯示行結束符$

            -n:對顯示出的每一行進行編號

            -A:顯示所有控制符

            -b:非空行編號

            -s:壓縮連續的空行成一行

            -v:查看windows下的^M

[root@localhost wang]# cat -n file1
     1	123456
     2	
     3	abcdwf
     4	
     5	
     6	

        tac:行倒過來顯示

[root@localhost wang]# tac  file1



abcdwf

123456

        rev:每一行的字符反著顯示

[root@localhost wang]# rev file1
654321

fwdcba

    分頁查看文件內容

        more:分頁查看文件

        more option file

            -d:顯示翻頁及退出提示

        less:一頁一頁的查看文件或stdin輸出

            查看是有用的命令包括:

                n/N 跳到下一個或上一個匹配

        less 命令是man命令使用的分頁器

    顯示文本前或后行內容

        head:顯示前面行

        head option file

            -c #:指定獲取前#字節

            -n #:指定獲取前#行

            – #:指定行數

        tail:顯示后面行

        tail option file

            -c #:指定獲取后#字節

            -n #:指定獲取后#行

            – #:指定行數

            -f:跟蹤顯示文件新追加的內容,常用日志監控

[root@localhost wang]# cat file1
123456
789987
abcdwf
gebi
laowang
[root@localhost wang]# head -n1 file1
123456
[root@localhost wang]# tail -n1 file1
laowang

    按列抽取文本cut和合并文件paste

        cut option file

            -d delimiter:指明分隔符,默認tab

            -c:按字符切割

            -f fileds:

                #:第#個地段

                #,#:離散的多個字段, 例如-f 1,3,4

                #-#:連續多個字段,例如1-6

                混合使用1-3,8

            –output-delimiter+STRING指定輸出分隔符顯示文件或stdin數據的指定列

[root@localhost wang]# cut -d: -f1,3 --output-delimiter=+ /etc/passwd
root+0
bin+1
daemon+2
adm+3
lp+4
sync+5
shutdown+6
halt+7
mail+8
operator+11
games+12
ftp+14
nobody+99
systemd-bus-proxy+999
.....

        paste:合并兩個文件同行號的列到一行

            paste option file

                -d 分隔符:指定分隔符,默認用tab

                -s:所有行合成一行顯示

[root@localhost wang]# paste -d / file1 file2
123456/12345
789987/qwdasd
abcdwf/12314
gebi/qwrqr
laowang/laowang

    收集文本統計數據wc

        計數單詞總數、行總數、字節總數和字符總數

        可以對文件的stdin中的數據運行

            -l:只計數行數

            -w:只計數單詞總數

            -c:只計數字節總數

            -m:只計數字符總數

[root@localhost wang]# wc file1
 5  5 34 file1
[root@localhost wang]# wc -l file1
5 file1
[root@localhost wang]# wc -w file1
5 file1
[root@localhost wang]# wc -c file1
34 file1
[root@localhost wang]# wc -m file1
34 file1

    文本排序sort

        把整理過的文本顯示在stdout,不改變原始文件

            sort option file(s)

                -r:執行反方向(由上至下)整理

                -n:執行按數字大小整理

                -f:選項忽略(fold)字符串中的字符大小寫

                -u:選項(獨特,unique)刪除輸出總的重復行

                -t c:選項使用c作為字段界定符

                -k X:選項按照使用c字符分個的X列來整理能夠使用多次

        uniq:從輸入中刪除重復的前后相接的行

            uniq option file

                -c:顯示每行重復出現的次數

                -d:僅顯示重復過的行

                -u:僅顯示不曾重復的行

                連續且完全相同方為重復

            常和sort 命令一起配合使用:

                sort file | uniq -c

[root@localhost wang]# cat file2
2
2
33
33
12
12
23
23
[root@localhost wang]# sort -n file2 |uniq -c
      2 2
      2 12
      2 23
      2 33

    比較文件

        比較兩個文件之間的區別

            diff file1 file2

[root@localhost wang]# diff file1 file2
2,4c2,4
< 789987
< abcdwf
< gebi
---
> qweq
> adaf
> afdqwr
注:2到4行不一樣

    復制對文件改變patch

        diff 命令的輸出被保存在一種叫做“補丁”的文件中

        使用-u選項來輸出“統一的(unified)”diff格式文件,最適用于補丁文件

        patch命令復制在其他文件中進行的改變(要謹慎使用)

        使用-b選項來自動備份改變了的文件

[root@English6 wang]# diff -t file1 file2 > file3
[root@English6 wang]# rm -f file2
[root@English6 wang]# ll
total 8
-rw-r--r--. 1 root root 29 Aug  8 15:44 file1
-rw-r--r--. 1 root root 60 Aug  8 15:48 file3
[root@English6 wang]# patch -b file1 file3
patching file file1
[root@English6 wang]# ll
total 12
-rw-r--r--. 1 root root 31 Aug  8 15:48 file1
-rw-r--r--. 1 root root 29 Aug  8 15:44 file1.orig
-rw-r--r--. 1 root root 60 Aug  8 15:48 file3
注:當恢復file2文件是自動命名file1,而原file1文件自動命名后面加.orig的文件

二、grep全面搜索正則表達式并把行打印出來

    grep:文本過濾(模式:pattern)工具

        grep,egrep,fgrep(不支持正則表達式搜索)

    sed:stream editor,文本編輯工具

    awk:linux上的實現gawk,文本報告生成器

    grep::Global search REgular expression and Print out the line

    作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查,打印匹配到的行

    模式:有正則表達式字符及文本字符所編寫的過濾條件

    grep option pattren file

[root@English6 wang]# grep --color=auto root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@English6 wang]# grep "$USER" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@English6 wang]# grep '$USER' /etc/passwd
[root@English6 wang]# grep `whoami` /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

        –color=auto:對匹配到的文本著色顯示

        -v:顯示不能夠被pattern匹配到的行

        -i:忽略字符大小寫

        -n:顯示匹配的行號

        -c:統計匹配的行數

        -o:僅顯示匹配到的字符串

        -q:靜默模式,不輸出任何信息

            echo $?:查看找沒找到 0:表示匹配到了

        -A #:顯示后#行

        -B #:顯示前#行

        -C #:顯示前后各#行

        -e:實現多個選項間的邏輯or關系

例如:grep -e 111 -e 222 file 找到file中有111或者222的行

        -w:正行匹配整個單詞

        -E:使用ERE

[root@English6 wang]# cat file1
root
wang
laowang
gebilaowang
wang
23
4
56
7
gebidashu
LAOWANG
[root@English6 wang]# grep -v "wang" file1
root
23
4
56
7
gebidashu
LAOWANG
[root@English6 wang]# grep -i "laowang" file1
laowang
gebilaowang
LAOWANG
[root@English6 wang]# grep -n "wang" file1
2:wang
3:laowang
4:gebilaowang
5:wang
[root@English6 wang]# grep -c "wang" file1
4
[root@English6 wang]# grep -o "wang" file1
wang
wang
wang
wang
[root@English6 wang]# grep -q "wang" file1
[root@English6 wang]# echo $?
0
[root@English6 wang]# grep -A2 "4" file1
4
56
7
[root@English6 wang]# grep -B2 "4" file1
wang
23
4
[root@English6 wang]# grep -C2 "4" file1
wang
23
4
56
7
[root@English6 wang]# grep -e "gebi" -e "root" file1
root
gebilaowang
gebidashu
[root@English6 wang]# grep -w "wang" file1
wang
wang

三、正則表達式

    regexp:有一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能

    程序支持:grep,vim,less,nginx等。

    分為兩類:

        基本正則表達式:BRE

        擴展正則表達式:ERE

    正則表達式引擎:

        采用不同算法,檢查處理正則表達式的軟件模塊

        PCRE(Perl Compatible Regular Expressions)

        元字符分類:字符匹配,匹配次數,位置錨定,分組

    字符匹配:

        .:匹配任意單個字符

        []:[]內的任意單個字符

        [^]:除[]內的任意單個字符

        [:digit:]:所有數字

        [:lower:]:所有小寫字母

        [:upper:]:所有大寫字母

        [:alpha:]:所有字母,包括大小寫

        [:alnum:]:所有字母和數字

        [:punct:]:所有標點符號

        [:space:]:空格和tab

    匹配次數:

        用在要指定次數的字符后面,用于指定前面的字符要出現的次數

        *:匹配前面的字符任意次,包括0次

            貪婪模式:盡可能長的匹配

        .*:任意長度的任意字符

        \?:匹配前面的字符0或1次

        \+:匹配前面的字符至少1次

        \{n\}:匹配前面的字符n次

        \{m,n\}:匹配前面的字符至少m次,最多n次

        \{,n\}:匹配前面的字符最多n次

        \{m,\}:匹配前面的字符多少m次

    位置錨定:

        定位出現的位置

        ^:行首

        $:行尾

        ^pattern$:用于模式匹配正行

        ^$:空行

        ^[[:space:]]*$:空白行

        \<或\b:詞首錨定

        \>或\b:詞尾錨定

        \<pattern\>:匹配整個單詞

    分組:

        \(\):將一個或多個字符捆綁在一起,當作一個整體進行處理

            例如:\(root\)\+  匹配root在文件行中最少一次

        分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為:\1,\2,\3……

        \1:從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符

        后向引用:引用前面的分組括號中的模式所匹配字符(而非模式本身)

[root@English6 wang]# cat file1
root1wangrootwang
rootwang2rootwang
rootwangroot3wang
root1wangruutwaag
rootwang2ruutwaag
rootwangruut3waag
[root@English6 wang]# grep "\(r..t\).*\(w..g\)\1\2" file1
root1wangrootwang
[root@English6 wang]# grep "\(r..t\)\(w..g\).*\1\2" file1
rootwang2rootwang
[root@English6 wang]# grep "\(r..t\)\(w..g\)\1.*\2" file1
rootwangroot3wang

    擴展正則表達式

        egrep option pattern file

        字符匹配:

            .:匹配任意單個字符

            []:[]內的任意單個字符

            [^]:除[]內的任意單個字符

        次數匹配:

            *:匹配前面字符任意次

            ?:匹配前面字符0或1次

            +:匹配前面的字符至少1次

            {n}:匹配前面的字符n次

            {m,n}:匹配前面的字符至少m次,最多n次

 

        位置錨定:

            ^:行首

            $:行尾

            \<或\b:詞首錨定

            \>或\b:詞尾錨定

        分組:

            ()

            后向引用:\1,\2….

        或者:

            a|b:a或者b

            C|cat:C或cat

原創文章,作者:DYW,如若轉載,請注明出處:http://www.www58058.com/30040

(0)
DYWDYW
上一篇 2016-08-10
下一篇 2016-08-10

相關推薦

  • 推薦-HA專題: 編譯安裝并配置DRBD

    HA專題: 編譯安裝并配置DRBD 前言 實驗環境 DRBD介紹 安裝前準備工作 獲取并編譯安裝DRBD 配置DRBD 分區 配置文件 啟動并設置DRBD 格式化并掛載 驗證冗余性 總結 前言 上篇我們講到使用corosync+pacemaker實現MySQL高可用, 但是NFS容易成為單點故障從而導致數據丟失等嚴重問題, 我們可以使用drbd來實現MySQ…

    Linux干貨 2016-04-12
  • Linux運維之路基礎學習四

    當文件的權限不能滿足某個用戶時,ACL是一個好辦法

    Linux干貨 2017-12-03
  • Linux簡單命令

    cal 日歷 bc? 計算器 ? ? obase=2 輸出為二進制?????? ibase=2輸入為二進制????? \onnn八進制????? \xHH十六進制 $()識別命令和變量,同反向單引號 , 可在命令調用另一個命令的執行結果時用 字體顏色:紅色-打包文件(壓縮包),綠色-可執行,淺藍-軟連接,藍色-目錄 echo $SHELL查看當前shell …

    Linux干貨 2018-03-18
  • 關于生命中出現的那個男人

    絕對真男人     一個人的一生,會遇到很多很多的男人,哦,也會遇到很多很多的女人,但是我們今天就談談男人吧.在這蕓蕓眾生中對于我們這些志向于在linux求發展謀生存的人來說,有個男人會是所有linux愛好者的良師益友.這個男人就是man,這個男人是絕對的男人,因為他是在linux這個系統中無所不知的那個男人. &nb…

    Linux干貨 2016-10-27
  • N25期–第十四周作業

    系統的INPUT和OUTPUT默認策略為DROP; # iptables -P INPUT DROP # iptables -P OUTPUT DROP 1、 限制本地主機的web服務器在周一不允許訪問;新請求的速率不能超過100個每秒;web服務器包含了admin字符串的頁面不允許訪問;web服務器僅允許響應報文離開本機;   #iptables…

    Linux干貨 2017-04-10
  • 用戶查找與添加 第四周

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 cp /etc/skel /home/tuser1  chmod -R go=— /home/tuser1 2、編輯/etc/group文件,添加組hadoop…

    Linux干貨 2017-02-14
欧美性久久久久