Se você usa um sed moderno, o seguinte funciona:
sed -e 's/\(^\|[^0-9]\)1\.2\.3\.4\($\|[^0-9]\)/NEWIP/'
Ou seja, substitua 1.2.3.4 por NEWIP , se no início da linha ou precedido por um não dígito, e se adicionalmente no final da linha ou seguido por um não dígito.
Com uma versão antiga sed que não suporta regexps estendidos, é mais complicado. Você pode fazer isso, por exemplo, usando caracteres de marcação. Precisamos de dois caracteres com garantia de não ocorrerem na entrada. Na solução abaixo, eu uso , e : aqui, mas qualquer outro caractere serve, até mesmo caracteres de controle.
sed -e 's/\(1\.2\.3\.4\)/,:/;s/\([0-9]\),//;s/:\([0-9]\)//;s/,.*:/NEWIP/;s/[,:]//'
Primeiro, inserimos , antes e : após o padrão que queremos substituir; em seguida, excluímos , se precedido por um dígito e : se seguido por um dígito; então substituímos a string de , to : (se ainda estiver presente) pela string de substituição; finalmente, excluímos qualquer , ou : restante.
Com o perl, também é possível usar uma asserção de look-ahead negativo (?!\d) e uma asserção negativa de look-behind (?<!\d) para garantir que o padrão corresponda apenas se não precedido ou seguido por um dígito:
perl -pe 's/(?<!\d)1\.2\.3\.4(?!\d)/NEWIP/;'