sed命令拷屏

 

http://blog.sina.com.cn/s/blog_45497dfa0100w6r3.html   sed样例较多,可以参考

http://blog.sina.com.cn/s/blog_6dc9e4cf0100y40g.html

sed各种修改文本用法总结

http://blog.csdn.net/ysdaniel/article/details/7905837

 

-e,-n,-i,-f
g,p,r,w,!,d,l,n
s//p,s//g,{;}

[root@250-shiyan sed]# cat -n grade.txt
     1  M.Tansley       05/99   48311   Green     8     40     44
     2  J.Lulu          06/99   48317   green     9     24     26
     3  P.Bunny         02/99   48      Yellow    12    35     28
     4  J.Troll         07/99   4842    Brown-3   12    26     26
     5  L.Tansley       05/99   4712    Brown-2   12    30     28
###其中$d可以换成任何定址符号,例如逗号,正则,数字之类的
###删除尾行
[root@250-shiyan sed]# sed '$d' grade.txt
M.Tansley       05/99   48311   Green     8     40     44
J.Lulu          06/99   48317   green     9     24     26
P.Bunny         02/99   48      Yellow    12    35     28
J.Troll         07/99   4842    Brown-3   12    26     26
###删除除green行的其它行,相当于取反。
[root@250-shiyan sed]# sed '/green/!d' grade.txt
J.Lulu          06/99   48317   green     9     24     26
###行后插入
[root@250-shiyan sed]# sed '/green/a\\aaaaaaaaaaaa' grade.txt
M.Tansley       05/99   48311   Green     8     40     44
J.Lulu          06/99   48317   green     9     24     26
aaaaaaaaaaa
P.Bunny         02/99   48      Yellow    12    35     28
J.Troll         07/99   4842    Brown-3   12    26     26
L.Tansley       05/99   4712    Brown-2   12    30     28
###行前插入
[root@250-shiyan sed]# sed '/green/i\\aaaaaaaaaaaa' grade.txt
M.Tansley       05/99   48311   Green     8     40     44
aaaaaaaaaaa
J.Lulu          06/99   48317   green     9     24     26
P.Bunny         02/99   48      Yellow    12    35     28
J.Troll         07/99   4842    Brown-3   12    26     26
L.Tansley       05/99   4712    Brown-2   12    30     28
###替换行
[root@250-shiyan sed]# sed '/green/c\\aaaaaaaaaaaa' grade.txt
M.Tansley       05/99   48311   Green     8     40     44
aaaaaaaaaaa
P.Bunny         02/99   48      Yellow    12    35     28
J.Troll         07/99   4842    Brown-3   12    26     26
L.Tansley       05/99   4712    Brown-2   12    30     28
[root@250-shiyan sed]# sed '1,3y/99/87/' grade.txt
M.Tansley       05/88   48311   Green     8     40     44
J.Lulu          06/88   48317   green     8     24     26
P.Bunny         02/88   48      Yellow    12    35     28
J.Troll         07/99   4842    Brown-3   12    26     26
L.Tansley       05/99   4712    Brown-2   12    30     28
[root@250-shiyan sed]# sed -n  's/$/&aa/p' grade.txt
M.Tansley       05/99   48311   Green     8     40     44aa
J.Lulu          06/99   48317   green     9     24     26aa
P.Bunny         02/99   48      Yellow    12    35     28aa
J.Troll         07/99   4842    Brown-3   12    26     26aa
L.Tansley       05/99   4712    Brown-2   12    30     28aa
c.oi            13/97   8765    wo        34    88     4aa
###成功匹配并替换后写入aa.txt
[root@250-shiyan sed]# sed -n  's/$/&aa/w aa.txt' grade.txt
###在green行后读入aa.txt文件。
[root@250-shiyan sed]# sed '/green/r aa.txt' grade.txt
M.Tansley       05/99   48311   Green     8     40     44
J.Lulu          06/99   48317   green     9     24     26
# no packages own wtmpaaaaaaaaaaaaaaaaa and btmpaaaaaaaaaaaaaaaaa -- we'll rotate them here
/var/log/wtmpaaaaaaaaaaaaaaaaa {
    create 0664 root utmpaaaaaaaaaaaaaaaaa
/var/log/btmpaaaaaaaaaaaaaaaaa {
    create 0600 root utmpaaaaaaaaaaaaaaaaa
P.Bunny         02/99   48      Yellow    12    35     28
J.Troll         07/99   4842    Brown-3   12    26     26
L.Tansley       05/99   4712    Brown-2   12    30     28
c.oi            13/97   8765    wo        34    88     4

###
[root@250-shiyan sed]# sed  -n '/file/,/root/s/file/iiiiiiiiiiiiiiii/p' logrotate.conf
# rotate log iiiiiiiiiiiiiiiis weekly
# create new (empty) log iiiiiiiiiiiiiiiis after rotating old ones
# use date as a suffix of the rotated iiiiiiiiiiiiiiii
# uncomment this if you want your log iiiiiiiiiiiiiiiis compressed
###默认只替换匹配到的第一个字符串,除非加g,全局替换。
[root@250-shiyan sed]# sed -n  's/tmp/&aaaaaaaaaaaaaaaaa/p' logrotate.conf
# no packages own wtmpaaaaaaaaaaaaaaaaa and btmp -- we'll rotate them here
/var/log/wtmpaaaaaaaaaaaaaaaaa {
    create 0664 root utmpaaaaaaaaaaaaaaaaa
/var/log/btmpaaaaaaaaaaaaaaaaa {
    create 0600 root utmpaaaaaaaaaaaaaaaaa
###全局替换并打印,同时写入aa.txt文件。
[root@250-shiyan sed]# sed -n  's/tmp/&aaaaaaaaaaaaaaaaa/gpw aa.txt' logrotate.conf
# no packages own wtmpaaaaaaaaaaaaaaaaa and btmpaaaaaaaaaaaaaaaaa -- we'll rotate them here
/var/log/wtmpaaaaaaaaaaaaaaaaa {
    create 0664 root utmpaaaaaaaaaaaaaaaaa
/var/log/btmpaaaaaaaaaaaaaaaaa {
    create 0600 root utmpaaaaaaaaaaaaaaaaa

###只对下一行操作
[root@250-shiyan sed]# sed '/green/{n;s/12/9999/;}' grade.txt
M.Tansley       05/99   48311   Green   8       40      44
J.Lulu          06/99   48317   green   9       24      26
P.Bunny         02/99   48      Yellow  9999    35      28
J.Troll         07/99   4842    Brown-3 12      26      26
L.Tansley       05/99   4712    Brown-3 12      30      28
E.Wo            02/87   76      bule    34      88      5

###对不连续行执行操作,即指定行的删除
[root@250-shiyan sed]# sed -i '1s/$/#&/;4s/$/#&/' grade.txt
[root@250-shiyan sed]# cat grade.txt
#
J.Lulu          06/99   48317   green   9       24      26
P.Bunny         02/99   48      Yellow  12      35      28
J.Troll         07/99   4842    Brown-3 12      26      26#
L.Tansley       05/99   4712    Brown-3 12      30      28
E.Wo            02/87   76      bule    34      88      5

###针对不连续行操作
[root@250-shiyan sed]# sed '1d;3d;5d' grade.txt
J.Lulu          06/99   48317   green   9       24      26
J.Troll         07/99   4842    Brown-3 12      26      26#
E.Wo            02/87   76      bule    34      88      5
###标签函数应用,较难理解。定义标签p1,执行替换操作,当A或B到达3个时。 [root@
250-shiyan sed]# cat > file A B [root@250-shiyan sed]# sed '{:p1;/A/s/A/AA/;/B/s/B/BB/;/[AB]\{3\}/b;b p1;}' file AAA BBB ###列出非打印字符 [root@250-shiyan sed]# sed -n 'l' grade.txt M.Tansley\t05/99\t48311\tGreen\t8\t40\t44$ J.Lulu\t\t06/99\t48317\tgreen\t9\t24\t26$ P.Bunny\t\t02/99\t48\tYellow\t12\t35\t28$ J.Troll\t\t07/99\t4842\tBrown-3\t12\t26\t26$ L.Tansley\t05/99\t4712\tBrown-3\t12\t30\t28$ E.Wo\t\t02/87\t76\tbule\t34\t88\t5$

###第三行打印完就退出
[root@250-shiyan sed]# sed '3q' logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly

 

其中:test_sed的内容是:
1234567890
2345678901
3456789012
4567890123

sed 'y/1234567890/ABCDEFGHIJ/' test_sed
ABCDEFGHIJ
BCDEFGHIJA
CDEFGHIJAB
DEFGHIJABC
注意变换关系是按两个list的位置对应变换

sed 's/01/Ab/g' test_sed
1234567890
23456789Ab
3456789Ab2
456789Ab23
注意:第一行的0,1没有分别替换为A,b

test.txt,内容如下:
http://www.5566.cn/produce/20070804112/315613171.shtml
http://bj.5566.cn/produce/20070804112/31581217.shtml
http://sz.5566.cn/produce/2008090412/31581247.shtml

要求如下:将http://*.5566.cn/替换成/home/html/www.5566.cn

# sed -n 's/http.*\.cn/\/home\/html\/www.5566.cn/gp' test.txt
/home/html/www.5566.cn/produce/20070804112/315613171.shtml
/home/html/www.5566.cn/produce/20070804112/31581217.shtml
/home/html/www.5566.cn/produce/2008090412/31581247.shtml

 

[root@250-shiyan sed]# sed '3q' logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly

-e选项允许在同一行里执行多条命令。
sed -e '1,5d' -e 's/test/check/'example
如例子所示,第一条命令删除1至5行,第二条命令用 check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。
一个比-e更好的命令是--expression。它能给sed表达式赋值。
sed --expression='s/test/check/' --expression='/love/d' example

 

[root@manage ~]# cat qq
qqqqqqqqqqqq
ddddddddddd
wwwwwwwwwwww
在第二行插入换行与uuuu行。\n是换行 [root@manage
~]# sed -i '2i\\nuuuuuuuuu' qq [root@manage ~]# cat qq qqqqqqqqqqqq uuuuuuuuu ddddddddddd wwwwwwwwwwww
[root@manage ~]# cat qq qqqqqqqqqqqq uuuuuuuuu ddddddddddd wwwwwwwwwwww

在第三行后插入 [root@manage
~]# sed -i '3a\\n111111111' qq [root@manage ~]# cat qq qqqqqqqqqqqq uuuuuuuuu ddddddddddd 111111111 wwwwwwwwwwww

将第三行替换 [root@manage
~]# sed -i '3c\22' qq [root@manage ~]# cat qq qqqqqqqqqqqq uuuuuuuuu 22 111111111 wwwwwwwwwwww

删除第4行到第6行
[root@manage ~]# sed -i '4,6d' qq
[root@manage ~]# cat qq
qqqqqqqqqqqq
uuuuuuuuu
22

一次插入多行
[root@manage ~]# cat qq
qqqqqqqqqqqq
aaa
bbb
ccc
uuuuuuuuu
22
[root@manage ~]# sed -i '2i\ 5a ee;\nbbb fff;\nccc  oooooo;' qq
[root@manage ~]# cat qq
qqqqqqqqqqqq
 5a ee;
bbb fff;
ccc  oooooo;
aaa
bbb
ccc
uuuuuuuuu
22


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值