(轉自http://blog.csdn.net/wl_fln/article/details/7281986)正則表達式
Sed簡介c#
sed是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲「模式空間」(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並無 改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操做;編寫轉換程序等。如下介紹的是Gnu版本的Sed 3.02。編輯器
-i選項:直接做用源文件,源文件將被修改。spa
sed命令和選項:.net
a\ | 在當前行後添加一行或多行 |
c\ | 用新文本替換當前行中的文本 |
d | 刪除行 |
i\ | 在當前行以前插入文本 |
h | 把模式空間的內容複製到暫存緩衝區 |
H | 把模式空間的內容添加到緩衝區 |
g | 取出暫存緩衝區的內容,將其複製到模式緩衝區 |
G | 取出暫存緩衝區的內容,將其追加到模式緩衝區 |
l | 列出非打印字符 |
p | 打印行 |
n | 讀入下一行輸入,並從下一條而不是第一條命令對其處理 |
q | 結束或退出sed |
r | 從文件中讀取輸入行 |
! | 對所選行之外的行應用全部命令 |
s | 用一個字符串替換另一個字符串 |
替換標誌:3d
g | 在行內進行全局替換 |
p | 打印行 |
w | 將行寫入文件 |
x | 交換暫存緩衝區和模式空間的內容 |
y | 將字符轉換成另一個字符 |
sed例子:blog
打印:p命令ci
sed ‘/abc/p’ file | 打印file中包含abc的行。默認狀況sed把全部行都打印到屏幕,若是某行匹配到模式,則把該行另外再打印一遍字符串 |
sed -n ‘/abc/p’ file | 和上面同樣,只是去掉了sed的默認行爲,只會打印匹配的行 |
刪除:d命令get
sed ‘3,$d’ file | 刪除從第3行到最後一行的內容。 |
sed ‘$d’ file | 刪除最後一行的內容 |
sed ‘/abc/d’ | 刪除包含abc的行。 |
sed ‘3d’ file | 刪除第三行的內容 |
替換:s命令
sed ‘s/abc/def/g’ file | 把行內的全部abc替換成def,若是沒有g,則只替換行內的第一個abc |
sed -n ‘s/abc/def/p’ file | 只打印發生替換的那些行 |
sed ‘s/abc/&def/’ file | 在全部的abc後面添加def(&表示匹配的內容) |
sed -n ‘s/abc/def/gp’ file | 把全部的abc替換成def,並打印發生替換的那些行 |
sed ‘s#abc#def#g’ file | 把全部的abc替換成def,跟在替換s後面的字符就是查找串和 替換串之間的分割字符,本例中試# |
指定行的範圍:逗號
sed -n ‘/abc/,/def/p’ file | 打印模式abc到def的行 |
sed -n ‘5/,/def/p’ file | 打印從第五行到包含def行之間的行。 |
sed /abd/,/def/s/aaa/bbb/g | 修改從模式abc到模式def之間的行,把aaa替換成def |
多重編輯-e
sed -e ‘1,3d’ -e ‘s/abc/def/g’ file | 刪除1-3行,而後把其他行的abc替換成def |
讀文件:r命令
sed ‘/abc/r newfile’ file | 在包含abc的行後讀入newfile的內容 |
寫文件:w命令
sed ‘/abc/w newfile’ file | 在包含abc的行寫入newfile |
追加:a命令
sed ‘/abc/a\def’ file | 在包含abc的行後新起一行,寫入def |
插入:i命令
sed ‘/abc/i\def’ file | 在包含abc的行前新起一行,寫入def |
修改:c命令
sed ‘/abc/c\def’ file | 在包含abc的行替換成def,舊文本被覆蓋 |
讀取下一行:n命令
sed ‘/abc/{n ; s/aaa/bbb/g;}’ file | 讀取包含abc的行的下一行,替換aaa爲bbb |
轉換:y命令
sed ‘y/abc/ABC’ file | 將a替換成A,b替換成B,c替換成C(正則表達式元字符不起做用) |
退出:q命令
sed ‘/abc/{ s/aaa/bbb/ ;q; }’ file | 在某行包含了abc,把aaa替換成bbb,而後退出sed。 |
暫存和取用:h命令(把模式行存儲到暫存緩衝區)和g(取出暫存緩衝區的行並覆蓋模式緩衝區)G(取出臨時緩衝區的行)命令
h和g是複製行爲(覆蓋),H和G表示追加。
sed -e ‘/abc/h’ -e ‘$G’ file | 包含abc的行經過h命令保存到暫存緩衝區,在第二條命令匯中,sed讀到最後一行$時,G命令從暫存緩衝區中讀取一行,追加到模式緩衝區的後面。即全部包含abc的行的最後一行被複制到文件末尾。 |
sed -e ‘/abc/{h; d;}’ -e ‘/def/{g; }’ file |
包含abc的行會移到包含def的行上,並進行覆蓋。 |
暫存和互換:h和x命令
sed -e ‘/abc/h’ -e ‘/def/x’ file |
包含abc的行會被換成def的行。 |