Bash不会删除前导空格

时间:2011-11-09 11:39:42

标签: linux json bash scripting ifs

我似乎有一个非常奇怪的问题。我正在尝试使用jsawk从CURL命令中检索JSON字段值,但是jsawk需要它的JSON非常漂亮(由于“python -mjson.tool”,可以使用格式正确的JSON文件轻松实现)。

问题是我在JSON文件/字符串的开头有一个空格(这是非法的),但我似乎无法将其删除。

 {"response": {"status": {"version": "4.2", "code": 5, "message": "The Identifier specified does not exist"}}}

有几个选项独立于我的脚本(例如echo~ / m.json | sed -e's / ^ [\ t] * //')

{"response": {"status": {"version": "4.2", "code": 5, "message": "The Identifier specified does not exist"}}}

看到区别?但是以下所有方法都无法达到预期效果。我甚至尝试将字符串管道化为sed以模拟命令行行为而没有运气。有人能指出我正确的方向吗?

thisjson=$(curl -F "api_key=$apikey" -F "format=json" -F "md5=$thismd5" -F... );
echo $thisjson > $tempjson; #Req'd else bash re-evals curl command
temp=$(cat $tempjson);      #Read string back to variable
echo $temp;                 #Try several methods to strip ws
temp="${temp##+([[:space:]])}";
echo $temp;
temp=$(sed -e 's/^[[:space:]]*//' <<<"$temp")
echo "|${temp}|";
temp=$(echo ${temp/ /} );
temp="${temp#"${temp%%[![:space:]]*}"}"
echo $temp;                #Try piping string directly
thisprettyjson=$(echo $temp | sed -e 's/^[ \t]*//' |python -mjson.tool);
echo $thisprettyjson;

在“No JSON ... decode”

之前,它会向几行(每个回声一个)吐出一行
 {"response": {"status": {"version": "4.2", "code": 5, "message": "The Identifier specified does not exist"}}}
...
 {"response": {"status": {"version": "4.2", "code": 5, "message": "The Identifier specified does not exist"}}}
No JSON object could be decoded

我确信我错过了一些愚蠢的东西。也许唯一要提到的另一件事就是我已经改变了IFS,从Space / Tab / NL到简单的NL。

有人有任何想法吗?或者另一种解析JSON的简单方法? 谢谢!

1 个答案:

答案 0 :(得分:1)

我用这个做了测试:

tempjson='tempjson.txt'
thisjson=' {"response": {"status": {"version": "4.2", "code": 5, "message": "The Identifier specified does not exist"}}}'
echo $thisjson > $tempjson; #Req'd else bash re-evals curl command
...

它对我有用:

{"response": {"status": {"version": "4.2", "code": 5, "message": "The Identifier specified does not exist"}}}
|{"response": {"status": {"version": "4.2", "code": 5, "message": "The Identifier specified does not exist"}}}|

所以我会说你的$(curl -F "api_key=$apikey" -F "format=json" -F "md5=$thismd5" -F... );命令在字符串的开头有一个特殊的空格字符

因此,如果它不是'{'

,请尝试删除第一个char而不是空白字符