Sed per eliminare gli spazi vuoti


28

Qualcuno sa come utilizzare Sed per eliminare tutti gli spazi vuoti in un file di testo? Non ho provato a usare il comando "d" per farlo, ma non riesco a capirlo

Risposte:


35

Che tipo di "spazio"?

"Eliminare tutti gli spazi vuoti" può significare una delle cose diverse:

  1. elimina tutte le occorrenze del carattere spazio, codice 0x20.
  2. elimina tutto lo spazio orizzontale, incluso il carattere di tabulazione orizzontale, " \t"
  3. elimina tutti gli spazi bianchi, incluso newline " \n" e altri

Lo strumento giusto per il lavoro

Se sednon è un requisito per qualche motivo nascosto, è meglio utilizzare lo strumento giusto per il lavoro.

Il comando trha l'uso principale nel tradurre (da qui il nome "tr") un elenco di caratteri in un elenco di altri caratteri. Come caso angolare, può tradurre in un elenco vuoto di caratteri; L'opzione -d( --delete) eliminerà i caratteri che compaiono nell'elenco.

L'elenco dei caratteri può utilizzare le classi di caratteri nella [:...:]sintassi.

  1. tr -d ' ' < input.txt > no-spaces.txt
  2. tr -d '[:blank:]' < input.txt > no-spaces.txt
  3. tr -d '[:space:]' < input.txt > no-spaces.txt

Quando insisti sed

Con sed, la [:...:]sintassi per le classi di caratteri deve essere combinata con la sintassi per i set di caratteri in regexps [...], risultando in qualche modo confuso [[:...:]]:

  1. sed 's/ //g' input.txt > no-spaces.txt
  2. sed 's/[[:blank:]]//g' input.txt > no-spaces.txt
  3. sed 's/[[:space:]]//g' input.txt > no-spaces.txt

1
+1, la notazione POSIX per uno spazio vuoto è la strada giusta da percorrere.
Avinash Raj,

1
Ottimo suggerimento per usare tr per questo compito, funziona benissimo. L'unica cosa che dovevo regolare era che tr leggeva input dallo stdin, quindi quello che ha funzionato per me è stato tr -d ' ' < input.txt > no-spaces.txt.
Sky

Il commento di @ Sky funziona nel mio macOS (non testato in Linux). Forse la risposta dovrebbe essere aggiornata?
iplus26

Grazie mille @Sky, è davvero un brutto errore. Ora sistemerò le tre righe tr. (Lo vedi altrove?)
Volker Siegel,

7

Puoi usarlo per rimuovere tutti gli spazi bianchi in file:

 sed -i "s/ //g" file

2
Niente da fare. Ho provato anche un approccio simile. Non funziona
Giustino il

Vuoi eliminare spazi bianchi o schede?
Ciro,

1
cancellare lo spazio bianco
Giustino il

2
Un semplice test:man sed | sed "s/ //g"
Cyrus,

1
@starscream_disco_party: è lo stesso. Puoi sostituire tutti e 3 /con un carattere diverso, ad esempio:sed "ss ssg"
Cyrus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.