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 15:03
下一篇 2016-08-10 16:07

相關推薦

  • 中秋干貨之系統啟動修復

    在使用CentOS系統時,難免會有誤操作而導致機器不能正常啟動,這里介紹了多種啟動失敗的原因和修復的方法。 grub損壞類 grub 1stage 被破壞使用dd擦寫MBR前446字節,即抹去stage1階段–[root@_2_ ~]# reboot #重啟–啟動失敗,找不到系統,這時只能借助光盤進入修復模式,重新安裝grub&#82…

    Linux干貨 2016-09-15
  • 學習宣言

    別人笑我太瘋癲,我笑他人看不穿。不見五陵豪杰墓,無花無酒鋤作田。

    Linux干貨 2016-10-24
  • 開始學習Linux的一些建議

    建議讀者范圍 有開發經驗者。 科研人員(由其Numrical)。 動手能力強的。 只是好奇,對于Linux只是淺嘗輒止的就不建議繼續往下看了。 端正學習態度 Linux不等于駭客(or Cracker)。 當然眾所周知很多“黑客工具”都是Linux平臺上的,我幫助過很多Linux小白發現他們殊途同歸都是朝著類似Aircrack-ng去的。 但他們不知道的是:…

    Linux干貨 2015-02-26
  • Btrfs文件系統的管理和應用

        Btrfs(我們稱之為Butter FS或者B-tree FS)被稱為新一代的linux文件系統。一直以來,EXT文件系統以其卓越的穩定性成為linux標準的文件系統。但近年來,EXT3暴露出一些擴展性的問題(如單一文件大小限制、總文件系統大小限制等),于是便催生了EXT4。但同時,Btrfs向人們展現出諸多優…

    Linux干貨 2016-02-14
  • MAN手冊各章節功能介紹及快捷鍵位詳細說明

    MAN手冊各章節功能介紹及快捷鍵位詳細說明 M21-陸東貴 Man命令的作用:獲取外部命令的使用幫助信息; 使用方法:]#  man  COMMAND        選項:        -M /PATH/TO/SOME…

    Linux干貨 2016-10-18
  • linux目錄分類和各個目錄作用-2016-07-21

    linux目錄分類和各個目錄作用-2016-07-21 Linux安裝以后出現的文件目錄的作用:  文件系統的類型  LINUX有四種基本文件系統類型:普通文件、目錄文件、連接文件和特殊文件,可用file命令來識別。  普通文件:如文本文件、C語言元代碼、SHELL腳本、二進制的可執行文件等,可用cat、less、more、vi…

    Linux干貨 2016-08-04
欧美性久久久久