Sed 常用語法

Sed編輯器被稱做流編輯器(stream editor),流編輯器則會在編輯器處理數據之前基於預先提供的一組規則來編輯數據流。
Sed編輯器可以基於輸入到命令行的或是存儲在命令文本文件中的命令來處理數據流中的數據。它每次從輸入中讀取一行,用提供的編輯器命令匹配數據、按命令中指定的方式修改流中的數據,然後將生成的數據輸出到STDOUT。在六編輯器將所有命令與一行數據進行匹配後,它會讀取下一行數據並重復這個過程。在流編輯器處理完流中的所有數據行後,它就會終止。
使用方法:
1.在命令行定義編輯器命令:
$ echo "This is a test" | sed 's/test/test1'
$ sed 's/test/test1' datafie
2.在命令行中使用多個編輯器命令:-e
$ sed -e 's/A/B/ ; s/C/D/' datafile(一個單引號中間是分號)
3.從文本中讀取編輯器命令:
$ sed -f script datafile
$cat script
s/A/B/
s/C/D/
$

一.替換標記:
s/pattern/replacement/flags,有4種可用的替換標記:
1.數字:表明新文本將替換地擠出模式匹配的地方(例如“2”則替換第二處匹配的地方);
2.g:表明新文本將替換所有已有文本出現的地方;
3.p:打印與pattern匹配的替換後的行(通常跟 “-n” 一起使用);
4.w filename:將替換結果寫入到文件中。

二.使用地址:
默認情況下,在sed編輯器中使用的命令會作用於文本數據的所有行。如果只是想將命令作用於特定的行或者某些行,就要用到行尋址。尋址方式分爲兩種:
1.數字方式的行尋址:(跟vi下的替換有些類似)
$ sed ‘2s/A/B/' datafile(只對第二行起作用)
$ sed ’2,3s/A/B/' datafile (只對第二行第三行起作用)
$ sed ’2,$s/A/B/' datafile (只對第二行到最後一行起作用)
2.使用文本模式過濾器:
$ sed ‘/X/s/A/B/’ datafile(匹配X的行中B替換A)
3.組合命令:(指定一個地址範圍並且執行多條命令)
$ sed '3,${
> s/A/B/
>s/C/D/
}' datafile

三.刪除行:(sed編輯器不會修改原始文件
$ sed ‘3,$d' datafile(刪除第三行到最後一行)
$ sed ‘/pattern/’ datafile(刪除匹配模式i的行)
$ sed ‘/pattern1/,/pattern2/d’ datafile(刪除兩個模式間的行,第一個模式”打開“刪除,第二個模式”關閉“刪除)

四.插入和附加文本:
插入(insert)命令i會在指定行前增加一個新行;
追加(append)命令a會在指定行後增加一個新行。
$ echo "Test 2" | sed 'i\Test 1'
Test 1
Test 2

$ sed '3a\Test 1' datafile(在第三行後面追加Test 1)

五.修改行:
$ sed ’3c\Test 1‘ datafile(把第三行修改爲Test 1)
$ sed ’/A/c\Test 1‘ datafile(把所有匹配的行修改爲Test 1)

六.轉換命令:(唯一可以處理單個字符的sed命令,全局命令
[addres]y/inchars/outchars/(進行inchars和outchars值得一對一映射)

$ echo ”This 1 is a test of 1 try" | sed '/y/123/456/'
This 4 is a test of 4 try

七.關於打印:
$ echo "This is a test" | sed 'p'
this is a test
this is a test
$ sed -n '/pattern/p' datafile

$ sed '=' datafile(打印行號和數據)
1
This is one
2
This is two

$ sed -n 'l' datafile(列出命令 ”l” 允許打印數據流中的文本和不可打印的ASCII字符)
This\tis\tone$

八.sed文件操作:
1.向文件寫入:[address]w filename(必須要有寫入權限)
$ sed '1,2w Test' datafile(將datafile的前兩行打印到Test這個文件中)
$ sed '/pattern/w Test' datafile(將datafile匹配模式的行打印到Test這個文件中)

2.從文件讀取:[address]r filename
$ sed '3r datafile2' datafile(將datafile2的文本插入到datafile的第三行後面)
$ sed '/pattern/r datafile2' datafile(將datafile2的文本插入到datafile的匹配行後面,全局)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章