課程地址:http://edu.51cto.com/course/course_id-1108.html
html
sed '範圍(條件)命令' 文件正則表達式
命令中引用shell的變量須要加上引號,單引號括起來變量 '$xxx',或者雙引號括起來整個條件範圍
條件命令中的斜槓分隔符能夠換成其餘任意字符,用在條件範圍中存在斜槓容易混淆的時候shell
參數bash
-n 關閉默認輸出,結合標籤p,只輸出符合條件範圍的行 sed 's/tom/TOM/p'
-i 將修改結果回寫到文件。-i.bak表示將源文件以.bak備份ide
d 刪除
範圍條件3d
使用數字表示行號htm
sed '3d' test #刪除第3行
用逗號,表示行號範圍blog
sed '5,10d' test #刪除第5-10行
用波浪號~表示跨步get
sed '1~2d' test #從第1行起,每2行刪除1行。即,刪除奇數行
用$表示最後一行it
sed '$d' test #刪除最後一行
正則表達式(用//括起來,可替換使用其餘字符)
sed '/^student/d' test #刪除student開頭的行 sed '/\bstudent\b/d' test #刪除包含student單詞的行
s 替換 's/old/new/標籤'
old部分能夠使用正則表達式,new部分不能夠使用正則表達式
sed 's/tom/TOM/2' #將每行第2個出現的tom替換爲大寫TOM
標籤g 對一行中全部符合條件的字符都執行操做
標籤p 輸出符合條件範圍的行,未關閉默認輸出的狀況下,符合條件的行將輸出兩次
用分號;使sed一次性執行多個操做
sed 's/tom/TOM/g; s/aaa/AAA/g' test #將test中tom替換爲TOM,接着在此基礎上,將aaa替換爲AAA
如下是另外一個例子,先將輸出結果的連續逗號替換成單個,而後將逗號替換成製表符
new部分能夠使用的參數:
& 表示old的值
\U 把\U後面的全部字符更換爲大寫
sed 's/\[.*\]/\U&/' test #將test中[]內字符改成大寫
\u 把\u後面的第一個字符更換爲大寫
\L 把\L後面的全部字符更換爲小寫
\l 把\u後面的第一個字符更換爲小寫
\E 終止\U\L的轉換
\1 \2 引用old部分的分組內容,old部分的分組以()分隔,()須要\轉義(sed -r 能夠不用轉義\引用括號)。數字表示第幾個分組
sed -n 's/#\(Server\)\(Name\)/\2/p' test #輸出結果將#ServerName替換爲Name
i 在條件範圍行的上一行插入 sed '1atest' file #在file第1行後面追加test行
a 在條件範圍行的下一行插入
c 將知足某個條件的行替換(整行替換)
sed '/ONBOOT/c ONBOOT=yes/' ifcfg-eth0
y 替換 y/abc/XYZ/
n 在模式空間讀取範圍條件行的下一行
N 在模式空間將讀取範圍條件行追加到下一行,兩行合併爲一行,但兩行之間仍然有\n換行符
-------------------------------------
rhce rhce rh
ce rhce rhce
sed 'N:s/rhce/RHCA/g' test
-------------------------------------
保持空間
x 保持空間和模式空間內容互換
h 把模式空間的內容拷貝到保持空間(覆蓋)
H 把模式空間的內容拷貝到保持空間(追加)
g 把保持空間的內容寫入到模式空間(覆蓋)
G 把保持空間的內容寫入到模式空間(追加)
-------------------------------------
tom
jingli
bob
zongjian
mary
jingli
jerry
zongjian
sed -n -e '/jingli/!h' -e '/jingli/{x;p}' test
顯示jingli的上一行內容
sed -n -e '/jingli/!h' -e '/jingli/{H;x;s/\n/:/;p}' test
將jingli追加到上一行末尾,以冒號:分隔
sed -n 'h;n;G;p' test
奇數行和偶數行互換
-------------------------------------
sed 標籤 功能,實現循環。格式以下sed ':標籤 範圍1 命令1; /模式/b'sed ':label s/rhce/RHCA/; /rhce/b label' test替換rhce爲RHCA,以後檢測是否存在rhce,知足條件執行標籤跳轉。