Sed não é a ferramenta mais fácil para o trabalho - veja outras respostas para melhores ferramentas - mas isso pode ser feito.
Para substituir .
por -
apenas até o primeiro espaço, use s
em um loop.
sed -e '
: a # Label "a" for the branching command
s/^\([^ .]*\)\./-/ # If there is a "." before the first space, replace it by "-"
t a # If the s command matched, branch to a
'
(Note que algumas implementações de sed não suportam comentários na mesma linha. O GNU sed tem.)
Para executar a substituição até o último espaço:
sed -e '
: a # Label "a" for the branching command
s/\.\(.* \)/-/ # If there is a "." before the last space, replace it by "-"
t a # If the s command matched, branch to a
'
Outra técnica faz uso do espaço de espera do sed. Salve o bit que você não deseja modificar no espaço de armazenamento, faça seu trabalho e, em seguida, recupere o espaço de armazenamento. Aqui, eu divido a linha no último espaço e substituo os pontos por traços na primeira parte.
sed -e '
h # Save the current line to the hold space
s/.* / / # Remove everything up to the last space
x # Swap the work space with the hold space
s/[^ ]*$// # Remove everything after the last space
y/./-/ # Replace all "." by "-"
G # Append the content of the hold to the work space
s/\n// # Remove the newline introduced by G
'