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

cat:文件查看

    cat [OPTION]... [FILE]...

        -E:-E: 顯示行結束符$
        -n: 對顯示出的每一行進行編號
        -A:顯示所有控制符
        -b:非空行編號
        -s:壓縮連續的空行成一行


more:分頁查看文件
    more [OPTIONS...] FILE...
    -d: 顯示翻頁及退出提示


less:一頁一頁地查看文件或STDIN輸出
    查看時有用的命令包括:
        /文本搜索文本
        n/N跳到下一個或上一個匹配
less  命令是man命令使用的分頁器


head:顯示文本前n行
    head [OPTION]... [FILE]...
        -c #: 指定獲取前#字節
        -n #: 指定獲取前#行
        -#:指定行數


tail:顯示文本後n行
    tail [OPTION]... [FILE]...
        -c #: 指定獲取後#字節
        -n #: 指定獲取後#行
        -#:
        -f: 跟蹤顯示文件新追加的內容,常用日誌監控


cut:顯示文件或STDIN數據的指定列

    cut-d:-f1/etc/passwd
    cat /etc/passwd|cut-d:-f7
    cut-c2-5/usr/share/dict/words


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

    paste [OPTION]... [FILE]...
        -d:分隔符:指定分隔符,默認用TAB
        -s:所有行合成一行顯示
        paste f1 f2
        paste -s f1 f2


uniq:從輸入中刪除前後相接的重複的行

    uniq[OPTION]... [FILE]...
        -c: 顯示每行重複出現的次數
        -d: 僅顯示重複過的行
        -u: 僅顯示不曾重複的行
        連續且完全相同方爲重複

    常和sort 命令一起配合使用:
        sort userlist.txt | uniq-c


sort:文本排列
    -n 按數字排列
    -r 倒序排列,默認升序
    -t 指定分隔符
    -k 指定哪一列
    -f 忽略大小寫
    -u 刪除重複行


diff :比較
    diff f1 f2 比較兩個文件的不同之處
    diff -u f1 f2 > diff.log
    rm -f f2
    patch -b f1 diff.log
    mv f1 f2
    mv f1.orig f1


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

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

    grep [OPTIONS] PATTERN [FILE...]
        grep root /etc/passwd
        grep "$USER" /etc/passwd
        grep '$USER' /etc/passwd
        grep `whoami` /etc/passwd

        --color=auto 關鍵字高亮顯示
        -v 反向搜索
        -i 忽略大小寫
        -n 顯示行號
        -c 不顯示搜索結果,僅顯示匹配的行數
        -o 僅顯示匹配到的字符串
        -q 靜默輸出
        -A #  顯示搜索行及其向下相臨的#行
        -B #  顯示搜索行及其向上相臨的#行
        -C #  顯示搜索行及其向上和向下相臨的#行
        -e char1 -e char2 [-e charN] 多個選項間or關係
        -w 匹配整個單詞
        -E 或egrep 支持擴展正則表達式
        -F 或fgrep 不支持正則表達式


正則表達式

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

程序支持:grep,sed,awk,vim, less,nginx,varnish等

分類:

    基本正則表達式:BRE

    擴展正則表達式:ERE

        grep -E,egrep

正則表達式引擎:
    採用不同算法,檢查處理正則表達式的軟件模塊
    PCRE(Perl Compatible Regular Expressions)

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

man 7 regex

基本正則表達式元字符

字符匹配:
    . 匹配任意單個字符
    [] 匹配指定範圍內的任意單個字符
    [^] 匹配指定範圍外的任意單個字符
    [:alnum:] 字母和數字
    [:alpha:] 代表任何英文大小寫字符,亦即A-Z, a-z
    [:lower:] 小寫字母[:upper:] 大寫字母
    [:blank:] 空白字符(空格和製表符)
    [:space:]水平和垂直的空白字符(比[:blank:]包含的範圍廣)
    [:cntrl:] 不可打印的控制字符(退格、刪除、警鈴...)
    [:digit:] 十進制數字[:xdigit:]十六進制數字
    [:graph:] 可打印的非空白字符
    [:print:] 可打印字符
    [:punct:] 標點符號

正則表達式

匹配次數:用在要指定次數的字符後面,用於指定前面的字符要出現的次數
    * 匹配前面的字符任意次,包括0次
    貪婪模式:儘可能長的匹配
    .*任意長度的任意字符
    \?匹配其前面的字符0或1次
    \+匹配其前面的字符至少1次
    \{n\}匹配前面的字符n次
    \{m,n\}匹配前面的字符至少m次,至多n次
    \{,n\}匹配前面的字符至多n次
    \{n,\}匹配前面的字符至少n次

位置錨定:定位出現的位置
    ^ 行首錨定,用於模式的最左側
    $ 行尾錨定,用於模式的最右側
    ^PATTERN$ 用於模式匹配整行
    ^$ 空行
    ^[[:space:]]*$ 空白行
    \< 或\b詞首錨定,用於單詞模式的左側
    \> 或\b詞尾錨定;用於單詞模式的右側
    \<PATTERN\>匹配整個單詞


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

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

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

示例:\(string1\+\(string2\)*\)

\1 :string1\+\(string2\)*

\2 :string2

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

或者:\|

示例:a\|b: a或b C\|cat: C或cat \(C\|c\)at:Cat或cat


QQ圖片20180121203116.png

QQ圖片20180121203137.png

egrep及擴展的正則表達式

egrep= grep -E

    egrep[OPTIONS] PATTERN [FILE...]

擴展正則表達式的元字符:

    次數匹配:
        *:匹配前面字符任意次
        ?: 0或1次
        +:1次或多次
        {m}:匹配m次
        {m,n}:至少m,至多n次

    位置錨定:
        ^ :行首
        $ :行尾
        \<, \b :語首
        \>, \b :語尾
    分組:
        ()
        後向引用:\1, \2, ...
    或者:
        a|b: a或b
        C|cat: C或cat
        (C|c)at:Cat或cat

字符匹配:

    . 任意單個字符

    [] 指定範圍的字符

    [^] 不在指定範圍的字符

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章