Para substituir apenas a segunda ocorrência, use o modificador 2
. Assim:
$ sed -E 's/-?[[:digit:]][.]/ &/2' file.dat
-0.0999999999999659 -0.0000000006287859
-0.0899999999999750 0.8000000006183942
-0.0799999999999841 -0.0000000007463807
-0.0699999999999932 0.0000000008661516
-0.0600000000000023 0.0000000008640644
-0.0500000000000114 0.0000000008807621
-0.0400000000000205 -0.7000000009575896
-0.0299999999999727 0.0000000009476864
-0.0199999999999818 0.0000000009150902
-0.0099999999999909 0.0000000008144152
0.0000000000000000 0.0000000007097434
0.0099999999999909 0.0000000007847500
0.0199999999999818 0.0000000009030998
0.0300000000000296 0.0000000009741985
Como funciona:
-
-E
Isso diz ao sed para usar o regex estendido. Isso elimina a necessidade de escapar do ?
.
-
s/-?[[:digit:]][.]/ &/2
Isso procura um -
opcional seguido por um dígito seguido por um literal .
. No texto de substituição, quatro espaços são adicionados antes de qualquer string correspondente, denotada como &
.
O modificador 2
no final do comando substituto diz ao sed para substituir apenas a segunda ocorrência do padrão.
Exemplos relacionados
Mais alguns exemplos mostrando como diferentes substituições podem ser feitas:
$ echo aaaa | sed 's/a/A/1'
Aaaa
$ echo aaaa | sed 's/a/A/2'
aAaa
$ echo aaaa | sed 's/a/A/3'
aaAa
$ echo aaaa | sed 's/a/A/4'
aaaA
$ echo aaaa | sed 's/a/A/g'
AAAA