1. 程式人生 > >Linux文本處理工具之grep sed簡概

Linux文本處理工具之grep sed簡概

graph 不可 -i 並不會 以及 符號 簡化 哲學 末尾

Linux文本處理工具之grep sed

在Linux系統中,有一個哲學思想:Linux系統下,一切皆文件。
由此可見,有關文本處理的工具有多重要,而我們經常用到文本處理工具主要有grep,sde,以及awk,也就是所稱的“文本三劍客”,而在本篇博客中,著重講解grep和sed的概念及用法,希望對大家的linux學習之路有所幫助,如有不足,請多多指正!

目錄

  1. grep概念及解析
  2. grep命令選項
  3. 正則表達式及擴展正則表達式
  4. sed概念及解析
  5. sed命令選項

    grep概念及解析

    grep(global search regular RE ) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用基本的正則表達式來搜索文本,並把匹配的行打印出來。
    grep是很常見也很常用的命令,它的主要功能是進行字符串數據的比較,然後符合用戶需求的字符串打印出來,但需要註意的是,grep在數據中查找一個字符串時,是以“整行”為單位進行數據篩選的。
    egrep命令等同於grep -E,利用此命令可以使用擴展的正則表達式對文本進行搜索,並把符合用戶需求的字符串打印出來。
    fgrep命令等同於grep -F,它利用固定的字符串來對文本進行搜索,但不支持正則表達式的引用,所以此命令的執行速度也最快。fgrep就是fixed grep或fast grep,它們把所有的字母都看作單詞,也就是說,正則表達式中的元字符表示回其自身的字面意義,不再特殊。

    grep命令選項

    --color=auto:對匹配到的文本著色顯示
    -v:顯示不被pattern匹配到的行
    -i:忽略字符大小寫
    -n:顯示匹配的行號
    -c:統計匹配的行數
    -o:僅顯示匹配到的字符串
    -q:靜默模式,不輸出任何信息
    -A #:after, 後#行
    -B #:before, 前#行
    -C #:context, 前後各#行
    -e:實現多個選項間的邏輯or關系
    grep –e ‘cat ’ -e ‘dog’ file
    -w:匹配整個單詞
    -E:使用ERE
    -F:相當於fgrep,不支持正則表達式

    正則表達式及擴展正則表達式

    (1)正則表達式介紹
    正則表達式,又稱正規表示法、常規表示法(Regular Expression,在代碼中常簡寫為regex、regexp或者RE),正則表達式使用單個字符串來描述、匹配一系列符號某個句法規則的字符串。在很多文本編輯器中,正則表達式通常被用來檢索、替換那些符號某個模式的文本。
    (2)元字符及定義
    ^:行首
    $:行尾
    .:任意單一字符
    [ ]:[ ]內任意單一字符
    [^] :除[ ]內任意單一字符
    前面字符重復不確定次數
    +:+前面字符重復一次以上不確定次數
    \?:?前面字符重復0或1次
    \:轉義符
    .:任意長度字符
    {n}:前面字符重復n次
    {n,}:前面字符重復n次以上
    {m,n}:前面字符重復m次和n次之間
    [:alnum:]:字母和數字
    [:alpha:]:代表任何英文大小寫字符,亦即 A-Z, a-z
    [:lower:]:小寫字母
    [:upper:]:大寫字母
    [:blank:]:水平空白字符(空格和制表符)
    [:space:]:所有水平和垂直的空白字符(比[:blank:]包含的範圍廣
    [:cntrl:]:不可打印的控制字符(退格、刪除、警鈴...
    [:digit:]:十進制數字
    [:graph:]:可打印的非空白字符
    [:print:]:可打印字符
    [:punct:]:標點符號
    [:xdigit:]:十六進制數字
    (3)擴展正則表達式元字符及定義
    . 任意單個字符
    [ ]:指定範圍的字符
    [^]:不在指定範圍的字符
    :匹配前面字符任意次
    ?:0或1次
    +:1次或多次
    {m}:匹配m次
    {m,n}:至少m,至多n次
    ^:行首
    $:行尾
    \<, \b:語首
    \>, \b:語尾
    |:或,a|b,匹配a或者b
    ():分組,如N(ame|AME)
    ()+:多個重復組的判別,如查找A開頭B結尾,中間有一個以上的xyz A(xyz)+B

    sed概念及解析
    sed是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩存區中,稱為"模式空間(pattern space)",接著用舍得命令處理緩沖區中的內容,處理完成後,把緩存區的內容輸出。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容並沒有改變,除非你是用重定向存儲輸出。sed主要用來編輯一個或多個文件。
    功能:主要用來自動編輯一個或多個文件,簡化對文件的反復 操作,編寫轉換程序等
    用法: sed [option]... ‘script‘ inputfile...

    sed命令選項
    -n:不輸出模式空間內容到屏幕,即不自動打印
    -e: 多點編輯
    -f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本
    -r: 支持使用擴展正則表達式 -i.bak: 備份文件並原處編輯
    script: ‘地址命令‘
    d: 刪除模式空間匹配的行,並立即啟用下一輪循環
    p:打印當前模式空間內容,追加到默認輸出之後
    a []text:在指定行後面追加文本 支持使用\n實現多行追加
    i []text:在行前面插入文本
    c []text:替換行為單行或多行文本
    w /path/somefile: 保存模式匹配的行至指定文件
    r /path/somefile:讀取指定文件的文本至模式空間中 匹配到的行後
    =: 為模式空間中的行打印行號
    !:模式空間中匹配行取反處理
    sed高級編輯命令
    P:打印模式空間開端至\n內容,並追加到默認輸出之前
    h: 把模式空間中的內容覆蓋至保持空間中
    H:把模式空間中的內容追加至保持空間中
    g: 從保持空間取出數據覆蓋至模式空間
    G:從保持空間取出內容追加至模式空間
    x: 把模式空間中的內容與保持空間中的內容進行互換
    n: 讀取匹配到的行的下一行覆蓋至模式空間
    N:讀取匹配到的行的下一行追加至模式空間
    d: 刪除模式空間中的行
    D:如果模式空間包含換行符,則刪除直到第一個換行符的模 式空間中的文本,並不會讀取新的輸入行,而使用合成的模 式空間重新啟動循環。如果模式空間不包含換行符,則會像 發出d命令那樣啟動正常的新循環

    以上就是本人在linux學習中對grep,sed的用法和見解,如有不足,請指正!

Linux文本處理工具之grep sed簡概