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 命令的简单应用