linux sed 命令的简单应用

WilliamLin 2012-01-28

linux sed 命令 是linux shell脚本中比较重要的命令,下面就根据一个小小的需求来琢步分解一条较复杂的sed命令。

首先创建一个测试文档,命名为 test.log

1
2
3
4
5
1 li.maoyuan cost=123ms
2 mao.yuan cost=234ms
3 maoyuan.li cost=345ms
4 li.mao.yuan cost=456ms
5 mao.yuan.li cost=567ms

需求是将这个日志中包含 “li” 的记录,中间名称部分和后面的消费时间,拼成一句sql ,并存入数据库。

期望的结果是

1
2
3
4
insert into values ("li.maoyuan","123")
insert into values ("maoyuan.li","345")
insert into values ("li.mao.yuan","456")
insert into values ("mao.yuan.li","567")

下面来一步步的分解。

首先利用grep命令来过滤 “li”

1
2
3
4
5
[root@web68 sed]# grep 'li' test.log
1 li.maoyuan cost=123ms
3 maoyuan.li cost=345ms
4 li.mao.yuan cost=456ms
5 mao.yuan.li cost=567ms

然后来删掉记录前面的数字

1
2
3
4
5
[root@web68 sed]# grep 'li' test.log | sed 's/. //'
li.maoyuan cost=123ms
maoyuan.li cost=345ms
li.mao.yuan cost=456ms
mao.yuan.li cost=567ms

解释:sed ‘s/. //’ linux sed 命令中的s标识,利用正则表达式来进行替换 ,正式表达式 /. / 是点加一个空格,意思是任意字符加一个空格。

然后同样利用linux sed 命令中的s来删掉”cost=”和”ms”

1
2
3
4
5
[root@web68 sed]# grep 'li' test.log | sed 's/. //' | sed 's/cost=//' | sed 's/ms//'
li.maoyuan 123
maoyuan.li 345
li.mao.yuan 456
mao.yuan.li 567

最后利用linux gawk命令把结果拼出SQL,并输出到result.log文件中

1
2
3
4
5
[root@web68 sed]# grep 'li' test.log | sed 's/. //' | sed 's/cost=//' | sed 's/ms//' | gawk '{print "insert into values (\""$1"\",\""$2"\");"}'; > resutl.log
insert into values ("li.maoyuan","123");
insert into values ("maoyuan.li","345");
insert into values ("li.mao.yuan","456");
insert into values ("mao.yuan.li","567");

这样就大功造成了,一句看似很复杂的命令集,其实都是若干个最基本点组成的。

linux sed的基本命令可以去这里了解 http://ericyuen.blogbus.com/logs/4819803.html

转载请保留出处 - linux sed 命令的简单应用

相关推荐