Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 字符串查找并替换为sed_Linux_Shell_Awk_Sed_Cat - Fatal编程技术网

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-r

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

  • s/^([^]+)(.*)/{“时间”:“\1”,“日志”:“\2”}/

    将该行划分为第一个单词,表示为
    \1
    ,其余所有单词,表示为
    \2
    ,然后将其转换为json格式

  • 1s/^/[/

    在第一行,用一个开放的方括号将所有内容放在前面
    [

  • $s/$/]/

    在最后一行(表示为
    $
    )上,找到行的末尾,也表示为
    $
    ,并在那里放一个结束方括号
    ]