gpt4 book ai didi

arrays - 将行分隔的 grep 结果放入数组

转载 作者:行者123 更新时间:2023-12-04 01:51:33 24 4
gpt4 key购买 nike

我有以下 grep 命令

echo v1.33.4 |  egrep -o '[0-9]{1,3}'

返回:
1
33
4

在 Bash-Script 中,我想将这些行分隔的数字放入一个数组中。
我试图将它直接分配给一个变量并对其运行 for 循环。但是循环中的 echo 只产生第一个数字 1

最佳答案

回答问题

how to store lines into an array?



当 Bash≥4 时,使用 mapfile像这样:
mapfile -t array < <(echo "v1.33.4" |  egrep -o '[0-9]{1,3}')

使用 Bash<4,使用循环:
array=()
while read; do
array+=( "$REPLY" )
done < <(echo "v1.33.4" | egrep -o '[0-9]{1,3}')

或者,使用单个 read陈述:
IFS=$'\n' read -r -d '' -a array < <(echo "v1.33.4" |  egrep -o '[0-9]{1,3}')

(但请注意,返回码是 1 )。

解决(我认为是)您的实际问题的答案:

您有一个变量用于存储字符串 v1.33.4并且您想要一个包含数字 1 的数组, 334 : 使用以下内容:
string=v1.33.4
IFS=. read -ra array <<< "${string#v}"

您根本不需要外部实用程序。

另一种可能性(这也将验证字符串的格式,所以我认为它是您的最佳选择)是使用正则表达式:
string=v1.33.4
if [[ "$string" =~ ^v([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)$ ]]; then
array=( "${BASH_REMATCH[@]:1}" )
else
echo >&2 "Error, bad string format"
exit 1
fi

然后,在数组的字段上循环:
for field in "${array[@]}"; do
echo "$array"
done

关于arrays - 将行分隔的 grep 结果放入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39611729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com