Sed, um Leerzeichen zu löschen

28

Weiß jemand, wie man Sed benutzt, um alle Leerzeichen in einer Textdatei zu löschen? Ich habe versucht, den Befehl "d" delete zu verwenden, kann ihn aber nicht herausfinden

Justin
quelle

Antworten:

35

Was für ein "Raum"?

Das Löschen aller Leerzeichen kann eine der folgenden Ursachen haben:

  1. Löschen Sie alle Vorkommen des Leerzeichens Code 0x20.
  2. Löschen Sie den gesamten horizontalen Bereich, einschließlich des horizontalen Tabulatorzeichens " \t".
  3. Löschen Sie alle Leerzeichen, einschließlich " \n" Newline und andere

Das richtige Werkzeug für den Job

Wenn sedes aus irgendeinem versteckten Grund nicht erforderlich ist, verwenden Sie besser das richtige Werkzeug für den Job.

Der Befehl trwird hauptsächlich zum Übersetzen (daher der Name "tr") einer Liste von Zeichen in eine Liste anderer Zeichen verwendet. Als Eckfall kann es in eine leere Liste von Zeichen übersetzt werden. Mit der Option -d( --delete) werden die in der Liste angezeigten Zeichen gelöscht.

Die Liste der Zeichen kann Zeichenklassen in der [:...:]Syntax verwenden.

  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

Wenn Sie darauf bestehen sed

Bei sed muss die [:...:]Syntax für Zeichenklassen mit der Syntax für Zeichensätze in regulären Ausdrücken kombiniert werden [...], was zu etwas Verwirrung führt [[:...:]]:

  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
Volker Siegel
quelle
1
+1, POSIX-Notation für ein Leerzeichen ist der richtige Weg.
Avinash Raj
1
Toller Tipp, um tr für diese Aufgabe zu verwenden, funktioniert super. Das Einzige, was ich anpassen musste, war, dass tr Eingaben von stdin liest, was für mich also funktionierte, war tr -d ' ' < input.txt > no-spaces.txt.
Himmel
@ Sky Kommentar funktioniert in meinem MacOS (nicht in Linux getestet). Vielleicht sollte die Antwort aktualisiert werden?
iplus26
Vielen Dank @Sky, das ist in der Tat ein schlimmer Fehler. Ich werde die drei Zeilen mit trjetzt beheben . (Sehen Sie es woanders?)
Volker Siegel
7

Sie können dies verwenden, um alle Leerzeichen zu entfernen in file:

 sed -i "s/ //g" file
Cyrus
quelle
2
Kein Würfel. Ich habe auch einen ähnlichen Ansatz ausprobiert. Funktioniert nicht
Justin
Möchten Sie Leerzeichen oder Tabs löschen?
Cyrus
1
lösche das Leerzeichen
Justin
2
Ein einfacher Test:man sed | sed "s/ //g"
Cyrus
1
@starscream_disco_party: es ist das gleiche. Sie können alle 3 /durch ein anderes Zeichen ersetzen , z. B .:sed "ss ssg"
Cyrus