2013-06-06 60 views
0

我必须将文本文件转换为json格式。该文本文件是这样的:通过删除逗号将文本文件格式化为json

[ { 
    "rule": "soi", 
    "val": [ 
     { 
      "abc": "OT01", 
      "del": 15 
     }, 
     { 
      "abc": "OT11", 
      "del": 15 
     }, 
     { 
      "abc": "OT20", 
      "del": 15 
     }, 

    ], 
    "ion": "OT" 
}, 
{ 
    "rule": "soi", 
    "val": [ 
     { 
      "abc": "UF01", 
      "del": 15 
     }, 
        { 
      "abc": "UF08", 
      "del": 15 
     }, 
    ], 
    "ion": "UF" 
}, 
{ 
    "rule": "soi", 
    "val": [ 
     { 
      "abc": "UO01", 
      "del": 15 
     }, 

     { 
      "abc": "UO08", 
      "del": 15 
     }, 
     { 
      "abc": "UO09", 
      "del": 15 
     }, 
     { 
      "abc": "UO10", 
      "del": 15 
     }, 
     { 
      "abc": "UO20", 
      "del": 15 
     }, 
    ], 
    "ion": "UO" 
} ] 

所以基本上我只想行],之前删除,。任何想法在bash中使用awksed来做到这一点?

+0

这是很好的,你发布你想改变的文件,但[你有什么尝试?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – AlexLordThorsen

+0

@Rawrgulmuffins这几乎是文件。除了JSON之外,这些逗号都是“],”之前的逗号。我可以用Java来做到这一点,但如果可能的话,我想做些简短而又甜蜜的事情。我可以使用awk:awk'/]/{print a} {a = $ 0}'输入文件访问和打印这些行,但我不知道如何更新行而不是打印。 – user2133455

+0

啊,你说{打印a >>“some_file.json”},它会将输入从打印重定向到文件。 – AlexLordThorsen

回答

0

下面是一个简单sed脚本,可以做你想做的:

#!/bin/sed -rf 
:begin 
$!{ 
    N 
    bbegin 
} 
s/,(\s*\],)/\1/g 

使用chmod使其可执行文件,那么你就可以运行它:./sedscript myfile。请记住sed实际上不会修改文件,只是将修改后的文本输出到标准输出,因此您需要IO重定向来收集文件中的更改。

+0

这工作。谢谢。 – user2133455

0

如果你不在乎换行,空格和缩进,你可以使用JavaScript interperter为你做的工作:

echo "print(JSON.stringify(" `cat jsonfile.txt` "));" | js | tee jsonfile.txt