Sed Zeilenumbruch durch Leerzeichen ersetzen

Sed Zeilenumbruch Durch Leerzeichen Ersetzen



In UNIX/Linux ist der Befehl sed ein dediziertes Werkzeug zum Bearbeiten von Streams. Es kann verschiedene Operationen an einem Textstrom ausführen, wie z. B. Suchen, Finden und Ersetzen sowie Einfügen/Löschen. Zum größten Teil wird sed jedoch zum Suchen und Ersetzen von Textinhalten verwendet.

In diesem Handbuch zeigen wir, wie Sie mit sed Zeilenumbrüche durch Leerzeichen ersetzen.

Verwenden von sed zum Ersetzen von Text

Schauen wir uns zunächst schnell die Durchführung des grundlegenden Suchens und Ersetzens mit sed an. Die gleiche Methode wird verwendet, wenn Zeilenumbrüche durch Leerzeichen mit einigen zusätzlichen Optionen ersetzt werden. Die Befehlsstruktur ist wie folgt:







$ sed -e 's///'

Sehen Sie sich den folgenden Befehl an:



$ echo 'der schnelle braune Fuchs' | sed -e 's/schnell/schnell/g'



Der echo-Befehl gibt die Zeichenfolge bis aus STDOUT . Der STDOUT-Stream ist dann verrohrt zu sedieren. Wir haben sed angewiesen, jede Instanz von „quick to be replace“ durch „fast“ zu ersetzen. Abschließend wird die Ausgabe auf dem Bildschirm ausgedruckt.





Ersetzen von Zeilenumbrüchen durch Leerzeichen

Zur Demonstration habe ich die folgende Textdatei test.txt mit mehreren Dummy-Inhalten erstellt:

$ Katzentest.txt



Der Befehl sed akzeptiert reguläre Ausdrücke zur Beschreibung verschiedener Muster. Indem wir diese Funktion nutzen, werden wir Zeilenumbruch als \n beschreiben. Versuchen wir, die Zeilenumbrüche durch Leerzeichen zu ersetzen:

$ sed -e 's/\n/ /g' test.txt

Allerdings funktionierte das nicht wie erwartet. Um dieses Ziel zu erreichen, benötigen wir einige zusätzliche Optionen. Sehen Sie sich den folgenden Befehl an:

$ sed -e ':a;N;$!ba;s/\n/ /g' test.txt

Der Befehl sed hat mehrere Abschnitte; jede bezeichnet eine bestimmte Aufgabe:

  • :a: Erzeugt ein Label ‚a‘
  • N: Hängt die nächste Zeile an den Musterbereich an
  • $!ba: Wenn nicht die letzte Zeile, kehrt zum Label 'a' zurück
  • s/\n/ /g: Sucht und ersetzt Zeilenumbruch (\n) durch Leerzeichen (/ /). Das Muster wird global abgeglichen (/g)

Der Befehl sed durchläuft die Schritte bis zur letzten Zeile und ersetzt alle \n-Zeichen durch Leerzeichen.

Anstelle dieses komplexen Befehls können wir die Dinge vereinfachen, indem wir das Flag -z verwenden, das angibt, dass sed mit durch Null getrennten Datensätzen arbeitet. Der Befehl würde so aussehen:

$ sed -z -e 's/\n/ /g' test.txt

Alternative Methoden

Während sed die Aufgabe gut erledigen kann, gibt es einige alternative Tools. In diesem Abschnitt werden wir einige davon kurz untersuchen.

Für das folgende Beispiel können wir den Befehl tr verwenden, um Newline auf einfache Weise durch Whitespace zu ersetzen:

$ tr '\n' ' ' < test.txt

Wir können auch Perl verwenden, um die Arbeit zu erledigen. Die folgende Syntax ähnelt auch der, die wir mit sed verwendet haben (aber vereinfacht):

$ perl -p -e 's/\n/ /' test.txt

Eine andere Möglichkeit, Zeilenumbrüche durch Leerzeichen zu ersetzen, ist die Verwendung des Befehls „Einfügen“. Beachten Sie, dass nur ein Zeichen entfernt werden kann:

$ paste -s -d ' ' test.txt

Ähnlich wie sed wird Linux mit einem weiteren Tool awk ausgeliefert. Ähnlich wie sed kann es auch einige erweiterte Ersetzungen an der Eingabe durchführen. Verwenden Sie für unseren Zweck den folgenden awk-Befehl:

$ awk 1 ORS=' ' test.txt

Fazit

In diesem Handbuch wurde untersucht, wie wir mit sed Zeilenumbrüche durch Leerzeichen ersetzen können. Es wurde auf zwei verschiedene Arten erreicht. Dieser Leitfaden enthält auch andere relevante Tools, mit denen wir Zeilenumbrüche durch Leerzeichen ersetzen können.

Anstatt komplexe Befehle zu verwenden, die schwer zu merken sind, verwenden wir Bash-Skripte, um viele Dinge in Linux auszuführen. Obwohl es auf Kosten einiger Leistung geht, sind es die Flexibilität und Benutzerfreundlichkeit wert. Lerne mehr über Bash-Scripting für Anfänger .