A pergunta é feita explicitamente sobre o sed e é uma questão muito válida sobre a sintaxe do regexp do sed.
Mas, caso a pergunta subjacente seja sobre a substituição de espaços por _
, aqui está uma resposta alternativa usando a "ferramenta certa para o trabalho" para traduzir caracteres, que é tr
. ( man tr
).
O comando tr abc 123
substitui os caracteres da primeira lista pelos caracteres correspondentes no segundo. Assim, tr ' ' _
substitui o espaço pelo sublinhado.
$ echo ' 1 2 3 ' | tr ' ' _
_1_2_____3__
Para mostrar o caso mais geral, incluindo vários tipos de espaço em branco como o seu exemplo,
aqui está a saída para apenas traduzir o caractere de espaço normal ' '
para comparação:
echo ' 1 2 3 x\ny\tz' | tr ' ' _
_1_2_____3__x
y z
E aqui está a saída ao traduzir todos os caracteres da classe: space: to _
:
echo ' 1 2 3 x\ny\tz' | tr '[:space:]' _
_1_2_____3__x_y_z_
(Observe que não há nova linha no final da saída - e há um _
após o z
.)
Isso pode ser escrito explicitamente como tr ' \t\n' _
, que é a forma abreviada de tr ' \t\n' ___
.
$ echo ' 1 2 3 x\ny\tz' | tr ' \t\n' _
_1_2_____3__x_y_z_