Come posso abbinare gli spazi bianchi in sed? Nei miei dati voglio abbinare tutti i 3+ caratteri successivi (spazio tabulazione) e sostituirli con 2 spazi. Come si può fare?
Come posso abbinare gli spazi bianchi in sed? Nei miei dati voglio abbinare tutti i 3+ caratteri successivi (spazio tabulazione) e sostituirli con 2 spazi. Come si può fare?
Risposte:
La classe di caratteri \s
corrisponderà ai caratteri degli spazi bianchi <tab>
e <space>
.
Per esempio:
$ sed -e "s/\s\{3,\}/ /g" inputFile
sostituirà ogni sequenza di almeno 3 spazi bianchi con due spazi.
NOTA : per la conformità POSIX, utilizzare la classe di caratteri [[:space:]]
anziché \s
, poiché quest'ultima è un'estensione GNU sed. Vedere le specifiche POSIX per sed e BRE
sed
ho dovuto usare [[:space:]]
perché \s
non ha funzionato per me. Forse \s
è un'estensione GNU sed ?
[[:space:]
uno si potrebbe usare [[:blank:]]
che corrisponde solo a schede e spazi orizzontali (ma nessuna nuova riga, scheda verticale ecc.).
Funziona su MacOS 10.8:
sed -E "s/[[:space:]]+/ /g"
sed "s/[[:space:]]\+/ /g"
abbinare uno o più spazi.
-E
bandiera.
Alcune versioni precedenti di sed potrebbero non riconoscere \ s come token di corrispondenza degli spazi bianchi. In tal caso è possibile abbinare una sequenza di uno o più spazi e schede con '[XZ] [XZ] *' dove X è uno spazio e Z è una scheda.
sed 's/[ \t]*/"space or tab"/'
sed
qualsiasi sistema? Altrimenti potrebbe valere la pena menzionare dove questo funziona in modo simile alle altre risposte, solo così conosciamo i limiti e dove questo potrebbe non avere il risultato desiderato.