sed 實例
注意,
1.h,n,N,d,g,G,x 命令要用花括號括起來,同時使用多個時用封號隔開。
2.這些命令都是針對行,即讀到的一條記錄操作。
sed -e [expression] -e [expression]
-e選項允許多點編輯,第一個編輯命令會對后面的編輯命令產生影響
w 寫入文件
sed -n '/north/w newfile2' datafile
查找datafile的文件,找到后寫入newfile2文件,注意會清掉原來newfile2里面的文字
r 從文件讀入
sed '/Suan/r newfile' datafile
從datafile文件找到suan后,在后讀入文件newfile
i在匹配的模式前一行插入,注意后面要緊接一個反斜杆
[root@test sed]# sed '/483/i\ new england' data.f
48 Dec 3BC1997 LPSX 68.00 LVX2A 134
38 Dec 3BC1997 LPSX 68.00 LVX2A 123
new england
483 Dec 3BC1997 LPSX 68.00 LVX2A 198
219 Nov 4CD1998 LPRC 56.98 LVX3B 342
a命令追加,在之后追加。與i相似
n,下一個,不復制匹配的模式﹔N下一個,復制當前匹配的模式,執行G時一并輸出
y變形命令如下:字母對應替換。。
[root@test sed]# sed '1,3y/DecLPSX/abclpsx/' data.f
48 abc 3BC1997 lpsx 68.00 lVx2A 134
38 abc 3BC1997 lpsx 68.00 lVx2A 123
483 abc 3BC1997 lpsx 68.00 lVx2A 198
219 Nov 4CD1998 LPRC 56.98 LVX3B 342
h復制到內存空間,d刪除當前模式空間﹔G貼出內存空間的值﹔q退出
sed -e '/38/{h;d}' -e '/219/{G}' data.f
sed '/198/{s/198/Joseph/;q;}' data.f
sed -e '/38/{h}' -e '${G;q}' data.f
sed -e '/38/h' -e '$q' data.f 這里只復制了,最后q退出了,并未執行G帖出
sed -e '/38/{h}' -e '/219/{G}' data.f
sed -e '/38/{h}' -e '/219/{g}' data.f
G輸出時不會覆蓋查找到的第二個模式'219'
g輸出時會將查找到的第二個模式'219'一并覆蓋
逗號表示范圍,丰號表示選項間分隔。。
h,x 替換
x使用復制到內存緩存區的模式1替換掉查找到的第二個模式
[root@test sed]# sed -e '/134/{h}' -e '/342/{x}' data.f
48 Dec 3BC1997 LPSX 68.00 LVX2A 134
38 Dec 3BC1997 LPSX 68.00 LVX2A 123
483 Dec 3BC1997 LPSX 68.00 LVX2A 198
48 Dec 3BC1997 LPSX 68.00 LVX2A 134
===========================================
[root@test sed]# cat data.f
48 Dec 3BC1997 LPSX 68.00 LVX2A 134
38 Dec 3BC1997 LPSX 68.00 LVX2A 123
483 Dec 3BC1997 LPSX 68.00 LVX2A 198
219 Nov 4CD1998 LPRC 56.98 LVX3B 342
==========================================
sed 's/[0-9][0-9]$/&.5' data.file
&代表整個匹配的模式1
sed 's/\(love\)able/\1or/' data.file
\1 代表第一個匹配的模式空間
sed '$d' data.file
sed data.file
sed 's/^....//' file 刪除每一行的前四個字符
sed 's/...$//' file 刪除每一行的后四個字符
sed 's/\([Oo]ccur\)ence\1rence' file
sed -n 'l' file 字母l,打印所有包含不能打印字符的行,這些不能打印的字符顯示為\nn,nn是字符的八進制
sed -e '/^Karen/{s/$/***/}' a.txt 查找Karen開頭的行,并在行后加三個星
Karen dsfe 09923 3***
Towr sfpoj oi423 3
sed 's/$/***/' a.txt 每行后面追加三個星號。
sed '/Towr/c\Jose has retired' a.txt c替換整行,查找到Towr所在的行,用后面的內容替換掉
sed -e '/^Karen/{h;d}' -e '${g}' a.txt 移動以karen開頭的行,并覆蓋到文件的最后一行
sed -e '/^Karen/{h;d}' -e '/$/{g}' a.txt 仔細比較$符號加了//,意議完全不同,
他會覆蓋掉每一行,因為/$/匹配的是每行的行尾
如:
sed a.txt
sed a.txt
每行后面追加@nsk字符。。
sed -e '$a\@nsk' a.txt 在文件最后一行追加一行 @nsk
阅读(758) | 评论(0) | 转发(0) |