我会很简短,我拥有的是
array=( one.a two.b tree.c four.b five_b_abc)
我想要这个
array=( two.b four.b five_b_abc )
来自here我发现了这个
# replace any array item matching "b*" with "foo"
array=( foo bar baz )
array=( "${array[@]/%b*/foo}" )
echo "${orig[@]}"$'\n'"${array[@]}"
这怎么不起作用
array2=( ${array[@]//%^.p/})
结果array2=array
这会删除所有p
array2=(${array[@]/*p*/})
结果array2=( one.a tree.c )
我需要知道如何添加^ p(所有接受p),并获得我的解决方案
array2=(${array[@]/*^p*/}
它是一个相当大的数组,大约有10k个元素,我需要这样做,我需要尽可能快地使用数据,所以请不要使用循环解决方案。
答案 0 :(得分:5)
你可以试试这个:
array2=(`echo ${array[@]} | sed 's/ /\n/g' | grep b`)
答案 1 :(得分:0)
如果将IFS设置为$'\ n',则可以在数组上使用带有<*>作为下标的 echo 命令,而不是带有'@'的printf: / p>
IFS=$'\n'; a=($(echo "${a[*]}" | sed '/.*[5-9]...$/!d'))
“ *”下标将数组元素连接在一起,并由IFS分隔。 (顺便说一下,我自己最近才学到这一点。)