分类: LINUX
2007-09-20 17:37:41
[root@TestAs4 chap04]# cat datafile 原文件
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Hemenway
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
[root@TestAs4 chap04]# sed -n '/north/p' datafile 取消默认输出 只打印包含模板的行
northwest NW Charles Main 3.0 .98 3 34
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
[root@TestAs4 chap04]# sed '/north/p' datafile 打印包含模板的行及打印默认输出
northwest NW Charles Main 3.0 .98 3 34
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Hemenway
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
2. 删除:d
[root@TestAs4 chap04]# sed '3d' datafile 删除第三行
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Hemenway
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
[root@TestAs4 chap04]# sed '3,$d' datafile 删除第三行到最后的所有行
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
[root@TestAs4 chap04]# sed '/north/d' datafile 删除所有包含模板north的行
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Hemenway
eastern EA TB Savage 4.4 .84 5 20
central CT Ann Stephens 5.7 .94 5 13
3. 选定行的范围:逗号
[root@TestAs4 chap04]# sed -n '/west/,/east/p' datafile 所有在模板west和east所确定的行都被打印
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Hemenway
[root@TestAs4 chap04]# sed -n '1,5'p datafile 打印第一、五行的内容
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Hemenway
[root@TestAs4 chap04]# sed '/west/,/east/s/$/**?VACA**/' datafile 对于east和west之间的行,末尾用**?VACA**替换
northwest NW Charles Main 3.0 .98 3 34**?VACA**
western WE Sharon Gray 5.3 .97 5 23**?VACA**
southwest SW Lewis Dalsass
southern SO Suan Chin 5.1 .95 4 15**?VACA**
southeast SE Patricia Hemenway
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
[root@TestAs4 chap04]# sed -n '/west/,/south/p' datafile
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass
4.多点编辑:e命令
[root@TestAs4 chap04]# sed -e '1,3d' -e 's/Hemenway/Jones/' datafile 删除1到3行,用Hemenway替换Jones
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Jones
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
5. 从文件读入:r 命令
[root@TestAs4 chap04]# cat newfile
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
| ***SUAN HAS LEFT THE COMPANY*** |
|_________________________________|
[root@TestAs4 chap04]# sed '/Suan/r newfile' datafile 把newfile文件内容放到Suan行的下面
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass
southern SO Suan Chin 5.1 .95 4 15
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
| ***SUAN HAS LEFT THE COMPANY*** |
|_________________________________|
southeast SE Patricia Hemenway
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
注:如果不止一个Suan 则newfile的内容就将显示在所有匹配行的下面
6. 写入文件:w命令
[root@TestAs4 chap04]# sed -n '/north/w newfile2' datafile 命令w表示把所有包含north的行写入到newfile2
[root@TestAs4 chap04]# cat newfile2
northwest NW Charles Main 3.0 .98 3 34
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
7. 追加:a 命令
[root@TestAs4 chap04]# sed '/^north/a ---->THE NORTH SALES DISTRICT HAS MOVED<---' datafile
northwest NW Charles Main 3.0 .98 3 34
---->THE NORTH SALES DISTRICT HAS MOVED<---
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Hemenway
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
---->THE NORTH SALES DISTRICT HAS MOVED<---
north NO Margot Weber 4.5 .89 5 9
---->THE NORTH SALES DISTRICT HAS MOVED<---
central CT Ann Stephens 5.7 .94 5 13
注: 在出现首个单词是north的后一行追加---->THE NORTH SALES DISTRICT HAS MOVED<---' 行
8. 插入: i 命令
[root@TestAs4 chap04]# sed '/eastern/i\
>
> -------------------------------------' datafile
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Hemenway
-------------------------------------
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
注:如果模板eastern被匹配,i命令把反斜杠后面的文本插入到包含eastern的行的前面
9. 替换:s 命令
[root@TestAs4 oracle]# pwd
/u01/app/oracle
[root@TestAs4 oracle]# pwd | sed 's/\/[^\/]*$/old/' 把“/ u01/app/oracle”的 “/oracle”替换为old
/u01/appold
[root@TestAs4 chap04]# sed -n 's/Hemenway/Jones/pg' datafile 所有的Hemenway行被Jones 替换并打印
southeast SE Patricia Jones
bbbbbbbb
cccccccc
dddddddd
attr4 = "val4"/>
替换指定xml节点中的attr4属性名
sed -e ‘/
=======================================================================================
sed -e ‘/
比如id="0"
当适配id="0"时开始进入{ :loop />/! {N; b loop}
:loop 是定义一个标签名为loop 这个标签脚本为 />/! {N; b loop}
/>/! 意思是当不适配>时执行{N; b loop}
N; 是增加下一行到模板直到遇到>为止 否则一直循环下去 然后把attr4替换为ak47
一般添加标签作为循环 主要是解决跨行问题。
select abc form dbs where a=b and b=c
select abc
form dbs
where
a=b and b=c
select
dbs
where
a=b
and
b=c
select * from dbs where a-b
要删除包含where a=b and b=c的行(也就是删除红字的行),但有可能是二行或是三行组成的。
结果如下:
select abc
form dbs
select
dbs
select * from dbs where a-b
因为包含的内容行数不固定用awk处理起来比较难,不知道sed可不可以处理,谢谢了!
sed '/where/{:a;s/[ \n]*where[ \n]*a=b[ \n]*and[ \n]*b=c//;tb;/\nwhere/{P;D;};N;ba;:b;d}' urfile
:a 冒号用来定义标签,名字可以自定义。:a定义标签a,用于指令跳转,循环处理。
tb t命令会在s///成功后跳到b标签;失败则不跳转,继续后面的指令。省略标签时,跳到脚本末尾,亦即开始处理下一行
ba 是无条件跳转到标签a。省略标签a则到脚本末尾。
[root@modem ~]# more 2
djjfkdjfk
Adkfjdkfj
fqqkd~
love1
kfjie~
love2
kdf~
love3
kdjfkdj
dkfjidj
dkfjiejfk
dkfjie
[root@modem ~]# sed 'N;:b;/\nlove/s/\n//;tb;P;D' 2
djjfkdjfk
Adkfjdkfj
fqqkd~love1
kfjie~love2
kdf~love3
kdjfkdj
dkfjidj
dkfjiejfk
dkfjie