Substituindo um ponto por um sublinhado em um arquivo usando sed

4

Eu estava tentando editar a saída de um arquivo usando sed. O conteúdo do arquivo é

cat /tmp/Group_RM
[email protected]
[email protected]

Eu estava tentando obter a saída como:

cat /tmp/Group_RM
t_p@k_p
t_m@k_k

Eu tentei o comando abaixo, mas a saída parecia estranha:

cat /tmp/Group_RM | sed 's/./_/g'

A saída é:

____ ___
_______

sed está substituindo todos os caracteres por sublinhados. Quando tentei substituir "_" por ".", O sed funciona perfeitamente.

    
por KumarJohn 18.05.2013 / 13:15

2 respostas

11

Você precisa escapar do . like \. . . é um metacaractere especial que corresponde a qualquer caractere único.

$ sed 's/\./_/g' Group_RM
t_p@k_p
t_m@k_k

Em uma nota lateral, cat não é necessário - sed pode lidar com os próprios arquivos.

    
por 18.05.2013 / 13:23
4

O motivo é que um ponto é um caractere especial em expressões regulares. Se você quer dizer um ponto real, você precisa escapar com \.

Além disso, você não precisa de gato, você pode dar o nome do arquivo para sed diretamente. Isso funciona:

sed 's/\./_/g' myfile.txt
    
por 18.05.2013 / 13:24

Tags