Solução usando Perl, faz edição no local
perl -i -pe 's/(\s\S+?)(\.?)\s*$/$1$2$1.com\n/' /etc/hosts
-
\s
corresponde a um caractere de espaço em branco
-
\S+?
não-ganancioso corresponde a 1 ou mais caracteres não-brancos
-
\.?
greedy match 0 ou 1 vezes o. personagem (para cuidar de possíveis extras. no final da linha)
-
\s*$
greedy corresponde a qualquer caractere de espaço em branco no final da linha
-
$1$2
retém a última coluna, excluindo os caracteres de espaço em branco no fim da linha
-
$1.com\n
add .com e caractere de nova linha
altere -i
para -i.bkp
para ter um backup (/etc/hosts.bkp) do arquivo original
Observação: essa expressão regular não funciona com sed
, pois o BRE / ERE não é compatível com correspondência não-voraz