所以我有这个:
INTERFACES=($(ip -o link show | awk -F': ' '{print $2}'))
给我一个接口数组,但是我想从数组中删除loopback和tun适配器。
INTERFACES=(${INTERFACES[@]/lo/})
INTERFACES=(${INTERFACES[@]/tun*/})
有效,但有没有办法在一行中完成这项工作?
可能超级容易和derp,但我想了解表达式实际上是如何工作的(谷歌给了我47239432以上的例子,但没有解释它是如何工作的或者给出了一次使用多个表达式的例子)。
我知道这可以使用awk命令完成,所以使用awk和使用数组过滤器的解决方案都会受到极大的赞赏:)
如果这是一个愚蠢的问题,我道歉。
答案 0 :(得分:2)
有很多方法可以做到这一点。一个例子:
# arr=(lo tun0 net1 net2)
# echo ${arr[@]}
lo tun0 net1 net2
# arr=( $( printf '%s\n' ${arr[@]} | egrep -v '^(lo|tun)' ) )
# echo ${arr[@]}
net1 net2
#
您也可以在一开始就排除这些界面:
INTERFACES=( $(ip -o link show | awk -F': ' '$2 !~ /^(lo|tun)/ {print $2}') )