Você precisa esquecer completamente o negativo - deixe de fora. Você quer consolidar dois campos - da esquerda para a direita. Isso é muito fácil.
sed ' s/ *\(.*\)/ /
s/\([0-9]* *\)\{2\}//g
s/[ -]*$//
' <<\IN
-1 2 3 4 -5 9
2 3 -4 5 -6 11
IN
-2 4 -9
3 -5 -11
Observe como eu evito qualquer referência ao sinal - quando a entrada é processada, o autômato irá aceitar apenas espaços ou números porque não entende mais nada - todo o resto é completamente ignorado e permanecerá em lugar.
Quando você especifica um \{
de intervalo de repetição numérica \}
para uma \(
subexpressão \)
, somente a última ocorrência dessa expressão é
referenciada. Então você pode apenas apertar - ou truncar - um intervalo de repetição que facilmente. E porque apertamos a repetição atrás do sinal - se houver um - a segunda ocorrência desse padrão seguirá qualquer sinal que precedeu o primeiro.
O comportamento descrito acima é especificado por POSIX para aplicativos compatíveis com todos BRE, mas pouquíssimos sed
s acertam. GNU sed
faz.
Por último, os espaços são apenas para tornar a ocorrência padrão regular .
Claro, isso nunca funcionará para você. Ou, provavelmente, mais corretamente, o sempre funcionará para você, mas nunca retornará nenhum resultado. Como poderia se o padrão fosse indefinido ?