linux中的三踐客grep\sed\awk,三劍在手誰與爭鋒

"""

<axiner>聲明:
(錯了另刂扌丁我)
(如若有誤,請記得指出喲,謝謝了!!!)

"""

grep 、sed、awk被稱爲linux中的"三劍客"

各特點:
    gerp 查找
    sed 編輯
    awk 格式化分析並處理

++++++++++++++++++++

以下爲基礎介紹

++++++++++

grep

===========

grep  (縮寫來自Globally search a Regular Expression and Print)是一種強大的文本搜索工具,它能使用特定模式匹配(包括正則表達式)搜索文本,並默認輸出匹配行。


語法格式:

    1\\ grep [options] 'pattern' [FILE...]        # 選項可省略
    2\\ ...|grep [options] 'pattern'        # `|`管道前可理解爲:已查詢的臨時文件


常用選項:

    -n        # 顯示行號
    -o        # 只顯示匹配內容
    -i        # 忽略大小寫
    -v        # 取反,不匹配
    -c        # 只輸出匹配行的計數
    -e        # 可指定多個匹配項,每個匹配項前都要帶`-e`  如:grep -ne "a" -e "b" test.txt           
        


sed        

===========
sed 全稱StreamEDitor,即流編輯器。


處理流程:(以行爲處理單位)

        讀取一行內容到模式空間--執行sed命令--輸出--重複之前操作


語法格式:

    1\\ sed的命令格式: sed [options] 'sed command' filename
    2\\ sed的腳本格式:sed [options] -f 'sed script' filename


常用選項:

    -f: 後跟保存了sed指令的文件
    -i: 直接對內容進行修改(不加時默認只是預覽顯示)
    -n: 使用安靜(silent)模式。只列出被sed處理的行
    -e: 多點編輯,允許多個腳本指令被執行。
    -r: 支持擴展正則+ ? () {} |
    

sed中的編輯命令:

    a: 追加  向匹配行後面插入內容
    i: 插入  向匹配行前插入內容
    d: 刪除  刪除匹配的內容
    s: 替換  替換掉匹配的內容--針對單個
    c: 更改  更改匹配行的內容--針對整行
    p: 打印  打印出匹配的內容,通常與-n選項和用
    
    =: 用來打印被匹配的行的行號
    n: 讀取下一行,遇到n時會自動跳入下一行
    r,w:讀和寫編輯命令,r用於將內容讀入文件,w用於將匹配內容寫入到文件
   

    常用的替換-s:
        sed 's/原字符串/替換字符串/'
        -----
        sed 's/^/內容/g'  # 在所有行首添加
        sed 's/$/內容/g'  # 在所有行末添加
        sed '2s/原字符串/替換字符串/g'  # 替換第2行
        sed '$s/原字符串/替換字符串/g'  # 替換最後一行
        sed '2,5s/原字符串/替換字符串/g'  # 替換2到5行
        sed '2,$s/原字符串/替換字符串/g'  # 替換2到最後一行

    
相關正則:

    $ 表示行尾
    ^ 表示行首
    [a-z0-9]表示字符範圍
    [^]表示除了字符集中的字符以外的字符

    sed的正則中  \(\)  和 \{m,n\} 需要轉義

    . 表示任意字符
    * 表示零個或者多個
    \+ 一次或多次
    \? 零次或一次   
    \| 表示或語法


總結:

    sed '定位+指令' 對象    # 即:定位+指令 >>>[定位]function
    增(ai)刪(d)改(cs)查(p)
    尾$全g
    
    # 注意:
    定位可用單數字、m,n、m,n!、正則等,
        如:
            sed '1s/aa/AA/g' test.txt  # 替換第一行所有的aa
            sed '5,$s/aa/AA/g' test.txt  # 替換第五行到最後所有的aa
            sed '5,$!s/aa/AA/g' test.txt  # 替換非第五行到最後所有的aa
            sed '/^2/c hello world' test.txt  # 替換以2開頭的所有行
            
    g寫在指令最後,如:sed '/^[0-9]/s/aa/AA/g' test.txt  # 替換以數字開頭的所有行
    


awk

===========
awk  一個優良的文本處理工具,Linux及Unix環境中現有的功能最強大的數據處理引擎之一。


處理流程:(以行爲處理單位)

    通常,awk是以文件的一行爲處理單位的。awk每接收文件的一行,然後執行相應的命令,來處理文本


語法格式:

    1\\ awk [options] 'script' var=value file(s)  
    2\\ awk [options] -f scriptfile var=value file(s)
    # 注意:
        以單引號來界定script, 因此內部最好用雙引號
        'script',即兩部分組成:'{pattern + action}'。pattern-模式:表示 awk 在數據中查找的內容,action-操作:是在找到匹配內容時所執行的一系列命令。


調用方式:

    (1) awk 命令行
    用於解決簡單的問題。當然,你也可以在shell script 程序中引用awk 命令行甚至awk 程序腳本。

    (2) 使用-f 選項調用awk 程序
    awk 允許將一段awk 程序寫入一個文本文件,然後在awk 命令行中用-f 選項調用並執行這段程序。

    (3) 利用命令解釋器調用awk 程序
    利用UNIX 支持的命令解釋器功能,我們可以將一段awk 程序寫入文本文件,然後在它的第一行加上#!/bin/awk –f.

    
關於'BEGIN{} //{command1; command2} END{}':

    awk [-F|-f|-v] 'BEGIN{} //{command1; command2} END{}' file
     [-F|-f|-v]   大參數,-F指定分隔符,-f調用腳本,-v定義變量 var=value
    '  '          引用代碼塊
    BEGIN   初始化代碼塊,在對每一行進行處理之前,初始化代碼,主要是引用全局變量,設置FS分隔符
    //           匹配代碼塊,可以是字符串或正則表達式
    {}           命令代碼塊,包含一條或多條命令
    ;          多條命令使用分號分隔
    END      結尾代碼塊,在對每一行進行處理之後再執行的代碼塊,主要是進行最終計算或輸出結尾摘要信息
 

常用命令選項:

    -F fs fs 指定輸入分隔符,fs可以時字符串或正則表達式
    -v var=value 賦值一個用戶定義變量,將外部變量傳遞給awk
    -f scriptfile 從腳本文件中讀取awk命令
    

常見變量:

    $n    當前記錄的第n個字段,字段間由FS分隔
    $0  完整的輸入記錄        # {print} 與 {print $0}都是打印當前行的全部內容
    FS     字段分隔符(默認是任何空格)
    NF     一條記錄的字段的數目
    NR     已經讀出的記錄數,就是行號,從1開始
    FNR    各文件分別計數的行號
    OFS    輸出記錄分隔符(輸出換行符),輸出時用指定的符號代替換行符


awk的 I/O指令:print, printf( ), getline, ...
awk的 流程控制指令:if(...){..} else{..}, while(...){...}, ...

 

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