比如从一行文件中读取了一个字符串值。
{"ip":"91.239.165.20","timestamp":"2015-10-16T14:14:31-04:00","data":{"banner":"220 ********.****rn","ehlo":"502 Error: command "EHLO" not implementedrn","starttls":"502 Error: command "STARTTLS" not implementedrn"},"error":"Bad return code for STARTTLS","error_component":"starttls"}
如你所见,字符串中包含了一个短语“EHLO”,就像
“某事“EHLO”结束”
但是现在我想让这条线看起来像这样,
"something \\"EHLO\\" the end"
如何转换替换这行JSON数据中的引号?
在 bash、正则表达式或其他...
它应该在命令行中运行。
非常感谢!
最佳答案
将 GNU awk 用于 split() 的第 4 个参数,这将适用于如您所示格式化的行:
$ cat tst.awk
{
n = split($0,f,/{"|"}|":{?"|"}?,"/,s)
for (i=1; i<=n; i++) {
gsub(/"/,"\\\"",f[i])
printf "%s%s", f[i], (i<n ? s[i] : ORS)
}
}
$ awk -f tst.awk file
{"ip":"91.239.165.20","timestamp":"2015-10-16T14:14:31-04:00","data":{"banner":"220 ********.****rn","ehlo":"502 Error: command \"EHLO\" not implementedrn","starttls":"502 Error: command \"STARTTLS\" not implementedrn"},"error":"Bad return code for STARTTLS","error_component":"starttls"}
如果您有其他格式不适用,那么您应该编辑您的问题以确保您提供的示例输入/输出更真实地代表您的真实数据。
关于json - 如何在 bash 中用\"替换 JSON 文件中的引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35947271/