sed实例一则

1、背景:

test.txt文件里有这些语句

li^E1026^D20150802B07QH800^B698.0^C20150801B08CDP00^B514.63^C20150803D00A8L00^B216.97
yitianke'blog

要找出以li^E开头的行,并将li^E这个头去掉,同时^D替换成逗号,^B^C替换成#并写入到新文件里

2、方法

用sed解决用两种写法,一个是

sed -n -e 's/^li^E//' -e 's/^D/,/' -e 's/^B/#/g' -e 's/^C/#/gp' "test.txt" >"my_test.txt"

-n代表是安静模式,只有经过sed 特殊处理的那一行(或者动作)才会被列出来;

-e代表是允许后面有多个命令;

s表示是替换模式,最后的p表示把替换后的语句打印出来。

注意:p只能在在最后出现,如果写成下面的格式

sed -n -e 's/^li^E//p' -e 's/^D/,/p' -e 's/^B/#/gp' -e 's/^C/#/gp' "kuaibao_test.txt" >"my_kuaibao.txt"

则会打印出四行,每个-e后面的替换结果都会打印出来,后面的替换会在前面替换的基础上继续替换

第二种写法比较简单:

sed -n '/^li^E/{s/li^E//;s/^D/,/;s/^B/#/g;s/^C/#/g;p}'  "test.txt" >"my_test.txt

 找到匹配模式^li^E的行后,执行后面花括号中的一组命令,每个命令之间用逗号分隔

s/^B/#/g完成一行中所有^B到#的替换,p和-n选项的合用,则只是打印作用到的行

参考链接:http://www.cnblogs.com/mchina/archive/2012/06/30/2570523.html

posted @ 2015-08-04 17:12  yitianke  阅读(148)  评论(0编辑  收藏  举报