sed 、awk 命令 基礎使用

1.1 sed
    sed編輯器會作如下操作。
    (1) 一次從輸入中讀取一行數據。
    (2) 根據所提供的編輯器命令匹配數據。
    (3) 按照命令修改流中的數據。
    (4) 將新的數據輸出到STDOUT(不會修改原文件)。
 
命令格式   sed 【options】【script】【file】
 
命令參數
選項
描述
-e
script 在處理輸入時,將script中指定的命令添加到已有的命令中(處理命令寫在命令中)
-f
file 在處理輸入時,將file中指定的命令添加到已有的命令中  (將待執行命令寫在文件中)
-n
不產生命令輸出,使用print命令來完成輸出
 
1.1.1 文本替換 命令s (substitute)  替換時,會區分大小寫
    echo "This is a test" | sed 's/test/big test/'           用“big test”替換“test”
    sed 's/dog/cat/' data1.txt                               用“cat”替換“dog”
 
 
運行多個編輯命令
 
sed -e 's/brown/green/; s/dog/cat/' data1.txt
ps: 兩個命令都作用到文件中的每行數據上。命令之間必須用分號隔開,並且在命令末尾和分號之間不能有空格
 
將多行命令存入文件運行
    sed編輯器知道每行都是一條單獨的命令
 
替換命令默認只會替換每行的第一處文本,
有4種可用的替換標記:
 數字,表明新文本將替換第幾處模式匹配的地方;    
     sed 's/test/trial/2' data4.txt  只替換每行第二次匹配的文本
 g,表明新文本將會替換所有匹配的文本;
    sed 's/test/trial/g' data4.txt  替換所有
 p,表明原先行的內容要打印出來;
     sed -n 's/test/trial/p' data5.txt   只輸出被修改過的行
 w file,將替換的結果寫到文件中。
             sed 's/test/trial/w test.txt' data5.txt  
 
替換內容包括特殊字符時,使用“!”加以區別
 
sed -n 's!conf/server.xml!conf/server-test!p' catalina.log
sed -n 's!conf/server.xml!conf/server-test!gw test.txt' catalina.log
 
 
1.1.2 行尋址(line  address)
        兩種方式 : 以數字形式表示行區間、 用文本模式來過濾出行。
    1.1.2.1 單獨某行
        sed -n '3s/xerces/xerces-test/p' catalina.log
    1.1.2.2 行區間
        sed -n '3,5s/xerces/xerces-test/p' catalina.log
    
 
    下列兩種讀取行數方式等同
    sed -n '3,5p' catalina.log > test.txt
    sed -n '3,5w test.txt' catalina.log
 
    1.1.2.3 從某行開始至末尾
        sed '2,$s/dog/cat/' data1.txt
 
1.1.3 多命令組合,以分號“;”分割
    sed -n '3s/xerces/xerces-test/;3s/internal/internal-test/p' catalina.log
    將修改前後打印出來
        sed -n '3{p;3s/internal/internal-test}' catalina.log
1.1.4 刪除行 d
    可以和行號、文本匹配(包括正則)搭配使用,刪除指定行的內容(原文件未改變
 
 
1.1.5 插入i( insert)、附加文本a( append)
      插入命令 i  會在指定行前增加一個新行;
      附加命令 a 會在指定行後增加一個新行。
 
1.1.6 列出命令 l (小寫L),顯示特殊字符
 
 

 
1.2 awk、gawk
選項
描述
-F fs 
指定行中劃分數據字段的字段分隔符
-f file 
從指定的文件中讀取程序
-v var=value 
定義gawk程序中的一個變量及其默認值
-mf N 
指定要處理的數據文件中的最大字段數
-mr N 
指定數據文件中的最大數據行數
-W keyword 
指定gawk的兼容模式或警告等級
 
echo "hai ge tou ya" | awk '{print "this is a"}'
 
1.2.1 gawk的主要特性之一是其處理文本文件中數據的能力。它會自動給一行中的每個數據元素分
配一個變量。變量如下。
$0 
代表整個文本行
$1
代表文本行中的第1個數據字段
$2
代表文本行中的第2個數據字段
$n
代表文本行中的第n個數據字段
默認的字段分隔符是任意的空白字符(例如空格、製表符)
 
1.2.2 需要使用指定分隔符
    sed -n '3,5p' catalina.log | awk -F . '{print $1}'
 
同時在命令文件中,也可用 特殊變量 “FS”來指定分割符  。FS的定義一定要放到 {} 中
 
1.2.3 命令組合(經驗證,不會修改原文件)
    
1.2.4 將命令寫入文件,“-f”參數引入文件
 
ps  其中用到的變量,和shell變量不同,未使用“$”。嘗試使用了“$”後,輸出異常,估計是和變量衝突了。
 
1.2.5 增加輸出 title  (“BEGIN”一定要大寫)
    sed -n '3,5p' catalina.log | awk -f script.swk
 
增加輸出頁腳 (在末尾輸出“END”)  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
發佈了29 篇原創文章 · 獲贊 9 · 訪問量 9292
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章