bash数组保留包含字符串的元素

时间:2012-03-18 21:24:41

标签: arrays bash element conditional-statements

我会很简短,我拥有的是

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个元素,我需要这样做,我需要尽可能快地使用数据,所以请不要使用循环解决方案。

2 个答案:

答案 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分隔。 (顺便说一下,我自己最近才学到这一点。)