摆脱awk或sed中的空格,尾随,下一行

时间:2015-09-08 11:05:02

标签: json awk sed newline space

我有一个JSON输出,我想修改一下:

JSON={"type":"global", "elements":[
    {"type":"car","model":"bmw", "elements":[
        {"type":"door", "number":"3"},
        {...},
        {...}]
    }]
}

我需要将所有内容放在一行中:

 JSON={"type":"global","elements":[{"type":"car","model":"bmw","elements":[{"type":"door","number":"3"},{...},{...}]}]}

我试过了:

 JSON=`echo "${JSON}" | nawk  'sub(" *","",$0)'`

和此:

 JSON=`echo "${JSON}" | sed  's/^[ \n\t]*//;s/[ \n\t]*$//'`

但是那些人帮助了我,结果是:

 JSON={"type":"global", "elements":[      <--- the remaining space between key-value groups were also supposed to disappear, but they don't
 {"type":"car","model":"bmw", "elements":[
 {"type":"door", "number":"3"},
 {...},
 {...}]
 }]
 }

如果有人能帮我告诉我如何摆脱键值组之间的空间,我真的很感激。

3 个答案:

答案 0 :(得分:7)

我似乎有点晚了。

嗯,对于它的价值,使用纯文本工具处理JSON与使用纯文本工具处理XML一样危险。在这种特殊情况下,例如,当JSON字符串包含空格时,您可能会遇到问题。

出于这个原因,我建议使用JSON处理工具,例如jq

JSON=$(echo "$JSON" | jq -c .)

jq正确解析JSON并注意保留其含义,因此保证输出与输入具有相同的含义。

答案 1 :(得分:4)

使用awk,您可以使用OFS和ORS变量

awk -v ORS= -v OFS= '{$1=$1}1' file

答案 2 :(得分:2)

只需使用tr删除它们:

$ tr -d '[\n\t ]' < file
JSON={"type":"global","elements":{"type":"car","model":"bmw","elements":{"type":"door","number":"3"},{...},{...}}}

来自man tr

  

-d , - 删除

     

删除SET1中的字符,不要翻译