将大文本块转换为json块

时间:2013-08-26 21:35:12

标签: json bash awk jira

我有一个BASH脚本,它尝试捕获构建/部署日志的输出,并使用Jira的REST API和CURL将它们插入到Jira票证中:

curl -v  -X POST \
-H "Content-Type: application/json" \
--data "@header.json" \
--data "@log.txt" \
--data "@footer.json" \
-H "Authorization:Basic ABC123!@#" \
https://companyname.jira.com/rest/api/latest/issue/FOO-1234/comment

我的问题是日志包含所有方式的JSON令牌,这会导致插入失败。 BASH是否有办法在发布之前清理文本blob以逃避所有非法字符?或者说“不解析这个块中的任何东西”或类似的方式?最糟糕的情况是,我会写一些非常可怕的AWK。

2 个答案:

答案 0 :(得分:0)

曾几何时,我使用此代码段使用curl发送POST数据。

urlquote() {
    echo -ne "$1" | xxd -plain | tr -d '\n' | sed 's/\(..\)/%\1/g'
}

它也适用于unicode的东西。也许这会有所帮助。

答案 1 :(得分:0)

事实证明,我需要逃脱的只是引号并将换行符转换为\ n。我使用了以下sed动作:

sed -inplace 's/\"/\\\"/g' log.txt
sed -inplace ':a;N;$!ba;s/\n/\\n/g' log.txt