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"}'
sed -n '3,5p' catalina.log | awk -F . '{print $1}'