Se o arquivo "host" de entrada é apenas um arquivo em que cada linha é um endereço IP e você deseja remover todos os endereços IP gerados por hostname -I
deste arquivo, tente isto:
sed -i "$(hostname -I | sed 's/\([.:[:xdigit:]]\{1,\}\)/\/\/d;/g')" ./host
O sed dentro da subsituição do comando que o nome do host é canalizado apenas converte os endereços IP gerados pelo nome do host em comandos sed delete para o sed externo. O sinal i
do sed diz ao sed para sobrescrever o arquivo que você fornece. Você pode querer executá-lo sem este sinalizador primeiro para garantir que a saída esteja correta ou dê a i
um argumento que informe ao sed para criar um backup do arquivo de entrada com esse argumento como um sufixo, por exemplo, -i'~'
produzirá um backup chamado host~
. Se a sua versão do sed não tiver esse sinalizador, você poderá gravar em um arquivo temporário e substituir o original:
sed "$(hostname -I | sed 's/\([.:[:xdigit:]]\{1,\}\)/\/\/d;/g')" ./host > /tmp/newhost && mv /tmp/newhost ./host
Acho que é isso que o i
faz nos bastidores de qualquer maneira.
Se você realmente quiser usar um alias, observe que os aliases só são substituídos textualmente quando estão a (s) primeira (s) palavra (s) de comando em um comando, então no seu exemplo original você precisaria usar a substituição de comando, ie $ (ownip), para dar ao sed a saída do alias. Sua mensagem de erro significa que o sed está tentando usar "ownip" como seu script, caso em que é reclamado porque o sed não possui o comando 'o'.