Chinaunix首页 | 论坛 | 博客
  • 博客访问: 858775
  • 博文数量: 254
  • 博客积分: 5350
  • 博客等级: 大校
  • 技术积分: 2045
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-27 13:27
文章分类

全部博文(254)

文章存档

2015年(1)

2014年(9)

2013年(17)

2012年(30)

2011年(150)

2010年(17)

2009年(28)

2008年(2)

分类: LINUX

2009-11-03 19:51:53

                          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
 
阅读(727) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~