Substitua todas as ocorrências de dois espaços após o final de uma sentença com apenas um espaço

9

Estou preso a incluir expressões regulares com um comando sed.

P: Eu quero substituir todas as ocorrências de dois espaços após o fim de uma sentença com apenas uma vez o espaço.

Aqui está o que eu fiz:

sed 's/^ $/^$/' file  

E não substituiu dois espaços por um espaço após o término da frase.

Saída eu recebo:

This is the output.  Hello Hello

Saída que desejo:

This is the output. Hello Hello
    
por Zeus 22.07.2016 / 07:32

3 respostas

12
 sed 's/\.   */. /g' < file

substituir ponto seguido por dois ou mais espaços com ponto seguido por um único espaço.

    
por 22.07.2016 / 07:39
13

Seu sed command 's/^ $/^$/' não fará o que você deseja. Apenas substituir todas as linhas contém um espaço com uma linha contendo ^$ .

Depende de quais caracteres marcam o final da frase, você pode fazer:

sed -e 's/\([.?!]\) \{2,\}/ /g' <file

Isso substituirá dois ou mais espaços após . , ? ou ! com apenas um espaço.

    
por 22.07.2016 / 07:43
7

Isso é o que você pode estar procurando,

tr -s " " <filename

Amostra,

$ echo "This is the output.  Hello Hello" | tr -s "[:blank:]"
This is the output. Hello Hello

Usando sed ,

$ echo "This is the output.  Hello Hello" | sed 's/\. \+/. /g'
$ echo "This is the output.  Hello Hello" | sed 's/\. \{1,\}/. /g'
This is the output. Hello Hello
    
por 22.07.2016 / 07:37