字符串查找并替换为sed

时间:2015-04-24 05:12:14

标签: linux shell awk sed cat

这包含文件中的以下信息。

17:06:31.301 [blabal] DEBUG blablabla1
17:06:31.302 [blabal] DEBUG blablabla2
17:06:31.303 [blabal] DEBUG blablabla3

获取该文件cat的内容,想知道我是否想将其更改为json格式。

[{"time" : "17:06:31.301", "log" : "[blabal] DEBUG blablabla1"}
{"time" : "17:06:31.302", "log" : "[blabal] DEBUG blablabla2"}
{"time" : "17:06:31.303", "log" : "[blabal] DEBUG blablabla3"}]

这样可以吗?

1 个答案:

答案 0 :(得分:0)

$ sed -r 's/^([^ ]+) (.*)/{"time" : "\1", "log" : "\2"}/; 1s/^/[/; $s/$/]/' file 
[{"time" : "17:06:31.301", "log" : "[blabal] DEBUG blablabla1"}
{"time" : "17:06:31.302", "log" : "[blabal] DEBUG blablabla2"}
{"time" : "17:06:31.303", "log" : "[blabal] DEBUG blablabla3"}]

如何运作

  • sed -r

    使用扩展正则表达式启动sed。对于BSD sed,请使用-E代替-r

  • s/^([^ ]+) (.*)/{"time" : "\1", "log" : "\2"}/

    将该行划分为第一个单词,表示为\1,其余全部用\2表示,然后将其放入json格式。

  • 1 s/^/[/

    在第一行,使用左方括号[添加所有内容。

  • $ s/$/]/

    在最后一行(标记为$)上,找到该行的末尾,也用$表示,然后在其中放置一个右方括号]

    < / LI>