gpt4 book ai didi

linux - 使用 Bash 将两个字符之间的所有字符串提取到数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:22 26 4
gpt4 key购买 nike

我搜索了我们的,但找不到使用 Bash 将两个字符之间的所有字符串提取到数组中的解决方案。

我找到了

sed -n 's/.*\[\(.*\)\].*/\1/p'

但这只显示最后一个条目。

我的字符串看起来像:

var="[a1] [b1] [123] [Text text] [0x0]"

我想要这样的数组:

arr[0]="a1"
arr[1]="b1"
arr[2]="123"
arr[3]="Text text"
arr[4]="0x0"

所以我在 [ 和 ] 之间搜索 Stings 并将其加载到没有 [ 和 ] 的数组中。

谢谢你的帮助!

最佳答案

没有简单的方法可以做到这一点。我会使用循环一次提取一个:

var="[a1] [b1] [123] [Text text] [0x0]"
regex='\[([^]]*)\](.*)'
while [[ $var =~ $regex ]]; do
arr+=("${BASH_REMATCH[1]}")
var=${BASH_REMATCH[2]}
done

在正则表达式中,\[([^]]*)\] 捕获第一个 [ 之后直到(但不包括)下一个 ](.*) 捕获下一次迭代之后的所有内容。

您可以在 bash 4.3 或更高版本中使用 declare -n 使它看起来不那么吓人。

declare -n m1=BASH_REMATCH[1] m2=BASH_REMATCH[2]
regex='\[([^]]*)\](.*)'

var="[a1] [b1] [123] [Text text] [0x0]"
while [[ $var =~ $regex ]]; do
arr+=("$m1")
var=$m2
done

关于linux - 使用 Bash 将两个字符之间的所有字符串提取到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49902786/

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