Removendo vários espaços usando sed

0

Eu tenho uma frase:

171211 22043707      21641 xxxx     xxxxxxx  From (,,xxxx,xxxx) Vxxxx1:  xxxxxx
171212 13441585        417 xxxx     xxxxxxxx Server manager informed of process termination, pinfo =  x,0000032585 13:44:15

O problema é o espaço entre 171211 22043707 e 21641 varia. Eu quero substituí-lo por um espaço. Como eu faço isso? Qual comando sed pode corresponder para um ou mais espaços?

    
por Anony 13.12.2017 / 05:34

3 respostas

2

Com tr você pode fazer isso muito mais fácil:

tr -s ' '

de tr man:

 -s, --squeeze-repeats
          replace each input sequence of a repeated character that is
          listed in SET1 with a single occurrence of that character
    
por RoVo 13.12.2017 / 13:04
1
sed 's/ \{2,\}/ /' # or
sed -E 's/ {2,}/ /'

Este comando substitui a primeira ocorrência de dois ou mais espaços ( {2,} ) por um único espaço, o que corresponde ao primeiro grande intervalo no seu exemplo. Se você quiser substituir a ocorrência de todos de dois ou mais espaços, adicione um g ao final do comando:

sed 's/ \{2,\}/ /g' # or
sed -E 's/ {2,}/ /g'

Se você quiser substituir apenas uma seqüência de, e. três ou mais espaços alteram o dígito de acordo.

    
por dessert 13.12.2017 / 12:41
0

Leia man sed com cuidado e man 7 regex e você entenderá:

sed -e 's/ \+/ /g'

mudará vários espaços adjacentes para um único espaço na linha inteira.

    
por waltinator 13.12.2017 / 05:56