Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash获取长字符串中匹配子字符串的值_Bash_Jenkins_Awk_Sed_Jq - Fatal编程技术网

Bash获取长字符串中匹配子字符串的值

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

我正在编写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 '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和jq来提取信息,而不需要任何grep或tr调用,也不需要任何shell循环,那么似乎会简单得多。假设您可以将
    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