Bash获取长字符串中匹配子字符串的值
我正在编写bash脚本,很难从匹配的子字符串中提取值。 我无法共享curl命令,因为它有敏感信息,但更新我遇到问题的I值(1)(更新为模拟真实值)。jq给出了解析错误Bash获取长字符串中匹配子字符串的值,bash,jenkins,awk,sed,jq,Bash,Jenkins,Awk,Sed,Jq,我正在编写bash脚本,很难从匹配的子字符串中提取值。 我无法共享curl命令,因为它有敏感信息,但更新我遇到问题的I值(1)(更新为模拟真实值)。jq给出了解析错误 curl -s -g "$line" | jq -c '.allBuilds[]' | while read i; do job_name=$(echo "$i" | jq .fullDisplayName | tr -d '»' | tr -s " " | sed
curl -s -g "$line" | jq -c '.allBuilds[]' | while read i; do
job_name=$(echo "$i" | jq .fullDisplayName | tr -d '»' | tr -s " " | sed 's/ /,/g' | tr -d '"')
done
预期产量
你好,Java,世界,大师,#47
我得到了大多数I值的预期输出,但出现了一些错误
下面是示例i值
一,
二,
我正在尝试提取fullDisplayName值,并尝试了以下选项
printf '%s\n' "$i" | grep fullDisplayName
printf“%s\n”在shell中尝试时以新行给出输出,但在脚本中的行为不同
{}
{}
{}]
fullDisplayName:Hello » Java » World » master #25
id:25
number:25
timestamp:1575582153372
read-r
curl
的输出安排为有效的JSON(*),那么沿着以下行调用jq就可以完成这项工作:
curl
的输出是否有效,您可以将curl
命令的输出导入jq empty
:
curl ... | jq empty
为什么你要搜索
fullDisplayName
并期望得到输出“Hello»Java»World»master#22”,“id”:“22”,“number”:22,“timestamp”:1574705541773
,它显然不包含你搜索到的字符串fullDisplayName
?你能发布curl
命令的输出吗“s在每个中”
在curl-s-g“$line”
中围绕$line
配对,它们相互抵消,因此什么也不做“$line”
与just$line
完全相同,因为它两侧的“
只是一个空字符串。我想/希望你的意思是,“$line”
两边都有单独的双引号(就像你在脚本后面对“$I”
所做的那样),所以你引用的是“$line
,而不是在它的两边冗余地放一个空字符串。@EdMorton编辑了我的文章(尝试了不同的选项)。您不能将格式化文本放入注释中。请将您的问题包括在所有相关信息中,这样我们可以帮助您。谢谢,curl中的read-r完成了这个技巧。没有r,.allBuilds[]不是有效的json
{}
{}
{}]
fullDisplayName:Hello » Java » World » master #25
id:25
number:25
timestamp:1575582153372
jq -c '.allBuilds[] | .fullDisplayName | gsub("»";"")'
curl ... | jq empty