如何从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