Linux 字符串查找并替换为sed
文件中包含以下信息Linux 字符串查找并替换为sed,linux,shell,awk,sed,cat,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 正在获取该文件的内容,我想知道是否要将其更改为json格式 [{"time" : "17:06:31.301", "log" : "[blabal] DEBUG blablabla1"} {"time" : "17:06:31.302", "l
17:06:31.301 [blabal] DEBUG blablabla1
17:06:31.302 [blabal] DEBUG blablabla2
17:06:31.303 [blabal] DEBUG blablabla3
正在获取该文件的内容,我想知道是否要将其更改为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"}]
这样可能吗
$ 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。对于BSD sed,使用sed-r
代替-E
-r
将该行划分为第一个单词,表示为s/^([^]+)(.*)/{“时间”:“\1”,“日志”:“\2”}/
,其余所有单词,表示为\1
,然后将其转换为json格式\2
在第一行,用一个开放的方括号将所有内容放在前面1s/^/[/
[
在最后一行(表示为$s/$/]/
)上,找到行的末尾,也表示为$
,并在那里放一个结束方括号$
]