O que você tem é o melhor caminho (embora eu use grep
over awk
, mas essa é uma preferência pessoal). A razão disso é porque você pode ter vários endereços por 'rótulo'. Assim, você precisa especificar qual endereço deseja excluir.
# ip addr help
Usage: ip addr {add|change|replace} IFADDR dev STRING [ LIFETIME ]
[ CONFFLAG-LIST ]
ip addr del IFADDR dev STRING
ip addr {show|save|flush} [ dev STRING ] [ scope SCOPE-ID ]
[ to PREFIX ] [ FLAG-LIST ] [ label PATTERN ]
ip addr {showdump|restore}
IFADDR := PREFIX | ADDR peer PREFIX
[ broadcast ADDR ] [ anycast ADDR ]
[ label STRING ] [ scope SCOPE-ID ]
Observe a sintaxe ip addr del
, que diz que os parâmetros são IFADDR
e STRING
. IFADDR
é definido abaixo disso e diz que PREFIX
é um parâmetro obrigatório (as coisas em []
são opcionais). PREFIX
é sua combinação de IP / sub-rede. Assim, não é opcional.
Quanto ao que eu quis dizer sobre usar grep
, é isso:
ip addr del $(ip addr show label eth0:100 | grep -oP 'inet \K\S+') dev eth0 label eth0:100
A razão para isto é no caso da posição do parâmetro mudar. As posições dos campos na saída ip addr
podem mudar com base nos campos opcionais. Eu não acho que o campo inet
mude, mas é apenas minha preferência.