如何从bash中的另一个数组删除一个数组的元素

时间:2020-01-09 10:38:07  来源:igfitidea点击:

在本文中,我将分享从bash中的另一个数组中删除一个数组中的元素的步骤。
假设我们有一个包含某些内容的数组,而另一个数组中存在相同的内容,那么最终目标是从bash中的主数组中删除重复的元素。
现在,其中删除重复的内容并不意味着我们合并两个数组并保留唯一值,而是删除另一个数组中已经存在的元素。

在bash中从另一个数组删除一个数组的元素的步骤

从数组中删除元素的完全匹配

因此,我将创建一个示例脚本,该脚本适合于我们有两个数组的情况。
其中我希望从array1删除array2内部可用的所有元素

#!/bin/bash
##
# @Description: delete elements of one array from another array in bash
##
array1="111 222 333 444 555 666 777 888 999"
array2="222 444"
for host in ${array2[@]}; do
array1=( "${array1[@]/$host}" )
done
echo "The new list of elements in array1 are: ${array1[@]}"

输出:

# /tmp/script.sh
The new list of elements in array1 are: 111 333 555 666 777 888 999

从数组中删除与正则表达式匹配的元素

在此示例中,我有两个数组,其中array2具有一些元素,并且我希望从array1删除array2中找到的所有匹配元素。
因此,为此,我们需要一些正则表达式,如示例中所示

#!/bin/bash
##
# @Description: delete elements of one array from another array in bash
##
array1=(111 222122 333 4444 555 666 777 888 999)
array2=(222 444)
result=("${array1[@]}")
for element in "${array2[@]}"; do
result=(${result[@]/*${element}*/})
done
echo "The new list of elements in array1 are: ${result[@]}"

输出:

# /tmp/script.sh
The new list of elements in array1 are: 111 333 555 666 777 888 999