根据bash中的模式从数组中删除元素

时间:2015-03-25 13:52:22

标签: bash

我有一个数组:

list[0]=.abc.com
list[1]=.dd.eu
list[3]=.ww.bb.com
list[4]=.abc.bgs.eu

我想从数组中删除以" .com"

结尾的所有项目

3 个答案:

答案 0 :(得分:1)

你可以这样做:

s='.com'
echo "${list[@]/*$s/}"
 .dd.eu  .abc.bgs.eu

或者将结果数组存储在新数组中:

s='.com'
read -ra arr <<< "${list[@]/*$s/}"
declare -p arr
declare -a arr='([0]=".dd.eu" [1]=".abc.bgs.eu")'

答案 1 :(得分:1)

简单方法 - 制作一个新数组,其中包含您有兴趣保留的元素:

new_list=()
for i in "${list[@]}"; do [[ $i != *.com ]] && new_list+=( "$i" ); done

答案 2 :(得分:0)

你可以试试这个:

这会将数组结果存储在不同的数组中。

declare -a pattern=( ${list[@]/*.com/} )
echo ${pattern[@]}

此处列表是您的数组

list[0]=.abc.com
list[1]=.dd.eu
list[3]=.ww.bb.com
list[4]=.abc.bgs.eu

和pattern是结果数组,输出如下:

.dd.eu .abc.bgs.eu