n=[:digit:] o="[$n]\{1,3\}\."
sed -e"s/^/ /" \
-e"s/\([^.$n]$o\)$o\($o${o%.})/./g" \
-e"s/.//" \
<in >out
Ele não restringe os octetos a 8bits, e não restringe a última octeto a três dígitos, mas pode ser bom o suficiente.
Se você deseja editar o arquivo no local, a melhor maneira de fazê-lo (em oposição a usar a opção -i
em perl
ou algum sed
s) é primeiro obter uma cópia temporária do arquivo, editá-lo e depois gravar a cópia temporária editada em seu original. A maioria dos shells (incluindo bash
e zsh
) fornecerão um arquivo temporário seguro automaticamente quando você solicitar um documento aqui:
sed -e"#...script..." \
<<IN >infile
$(cat <infile)
IN
O texto acima deixará todas as linhas em branco à direita infile
se houver alguma, mas existem várias outras respostas neste site que demonstram como preservá-las também, se você precisar. Ele também não manipula bytes nulos, o que é um problema mais difícil de resolver sem zsh
.