摆脱 awk 或 sed 中的空格、尾随、下一行
get rid of empty spaces, trailing, next line in awk or sed
我有一个 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(" *","",[=12=])'`
还有这个:
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"},
{...},
{...}]
}]
}
如果有人能告诉我如何去掉键值组之间的空格,我将不胜感激。
借助 awk,您可以使用 OFS 和 ORS 变量
awk -v ORS= -v OFS= '{=}1' file
只需使用 tr
:
删除它们
$ tr -d '[\n\t ]' < file
JSON={"type":"global","elements":{"type":"car","model":"bmw","elements":{"type":"door","number":"3"},{...},{...}}}
来自man tr
:
-d, --delete
delete characters in SET1, do not translate
我好像来晚了
好吧,就其价值而言,使用纯文本工具处理 JSON 与使用纯文本工具处理 XML 一样危险。例如,在这种特殊情况下,当 JSON 字符串包含空格时,您可能 运行 会遇到问题。
出于这个原因,我建议使用 JSON 处理工具,例如 jq
:
JSON=$(echo "$JSON" | jq -c .)
jq
正确解析 JSON 并注意保留其含义,因此这样可以保证输出与输入具有相同的含义。
我有一个 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(" *","",[=12=])'`
还有这个:
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"},
{...},
{...}]
}]
}
如果有人能告诉我如何去掉键值组之间的空格,我将不胜感激。
借助 awk,您可以使用 OFS 和 ORS 变量
awk -v ORS= -v OFS= '{=}1' file
只需使用 tr
:
$ tr -d '[\n\t ]' < file
JSON={"type":"global","elements":{"type":"car","model":"bmw","elements":{"type":"door","number":"3"},{...},{...}}}
来自man tr
:
-d, --delete
delete characters in SET1, do not translate
我好像来晚了
好吧,就其价值而言,使用纯文本工具处理 JSON 与使用纯文本工具处理 XML 一样危险。例如,在这种特殊情况下,当 JSON 字符串包含空格时,您可能 运行 会遇到问题。
出于这个原因,我建议使用 JSON 处理工具,例如 jq
:
JSON=$(echo "$JSON" | jq -c .)
jq
正确解析 JSON 并注意保留其含义,因此这样可以保证输出与输入具有相同的含义。