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
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?
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
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.
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.