我有一个类似的问题,这些案件:
Set a grep result into multiple variables
Append string on grep multiple results with variable in a single command的
但我不能接受他们的解决方案,并充分加以调整
我有一个查询,返回的网址列表,网址是统一格式,每个网址包含一个3位数的结束
我已经把一个例子复制到一个文件里
"url": "https://dev.azure.com/example/5121186b-6db9-49f7-8fcd-64e88a5c606d/_apis/build/Builds/238",
"url": "https://dev.azure.com/example/5121186b-6db9-49f7-8fcd-64e88a5c606d/_apis/build/Builds/239",
"url": "https://dev.azure.com/example/5121186b-6db9-49f7-8fcd-64e88a5c606d/_apis/build/Builds/240",
"url": "https://dev.azure.com/example/5121186b-6db9-49f7-8fcd-64e88a5c606d/_apis/build/Builds/241",
字符串
我试图抓住每个网址的末尾的3位数的构建号
这可以从命令行使用
(grep _apis/build/Builds build.txt | cut -d "/" -f9 | grep -Eo '[0-9]*')
238
239
240
241
型
但是,如果我试图将每个值捕获到一个变量数组(list?),我可以稍后循环,它出错了
queued_builds="$(grep _apis/build/Builds build.txt | cut -d "/" -f9 | grep -Eo '[0-9]*')"
型
如果我打印整个$queued_builds数组,它看起来没问题吗?
echo "${queued_builds[@]}"
238
239
240
241
型
但是如果我打印出$queued_builds,看起来它们都是作为一个单独的项目/字符串添加的,它们之间有换行符?
printf '%q\n' "$queued_builds[@]"
238$'\n'239$'\n'240$'\n'241
型
如果我试图访问一个特定的行/条目,我会从每个字符串中获得单个字符,而不是整个字符串?
echo $queued_builds[1]
2
echo $queued_builds[2]
3
echo $queued_builds[3]
8
etc.
型
我尝试将每个结果/行作为var条目,因此
echo $queued_builds[1]
238
echo $queued_builds[2]
239
echo $queued_builds[3]
240
etc.
型
我需要这个,因为我稍后想使用以下代码循环每个构建ID:
for build in ${queued_builds[@]}; do echo "https://dev.azure.com/${organization}/${project}/_apis/build/builds/$build?api-version=7.0"; done
型
我是否需要对变量的结果赋值做一些特定的事情来使每个结果成为一个新的数组项(或列表项,数组与列表在这一点上仍然有点混乱)?
多谢了
1条答案
按热度按时间jdzmm42g1#
以下是使用SED的解决方案:
字符串
输出量:
型
希望能帮上忙。