Website-Suche

So treten Sie der Linie unter Linux bei


Bei der Arbeit mit Text auf der Befehlszeile ist es manchmal sinnvoll, mehrere Zeilen miteinander zu verbinden. Anstatt Textdateien durchzugehen und Zeilen manuell zu verschieben, um in derselben Zeile zu sein, bietet uns unser Linux-System mehrere Tools, um uns diese Aufgabe zu vereinfachen. Protokolldateien sind ein gutes Beispiel für Text, der in der Regel in mehrere Zeilen aufgeteilt ist, und manchmal ist es einfacher, die Daten zu visualisieren, wenn einige Zeilen miteinander verbunden werden. In diesem Tutorial zeigen wir Ihnen verschiedene Möglichkeiten, Zeilen einer Datei auf einem Linux-System miteinander zu verbinden.

In diesem Tutorial lernen Sie:

  • So verbinden Sie Zeilen einer Datei mit verschiedenen Linux-Tools

So verbinden Sie sich mit einer Linie unter Linux – verschiedene Methoden

Als Beispiel verwenden wir eine Datei mit dem folgenden Text. Dies soll nur veranschaulichen, wie wir die drei Linien mit den verschiedenen unten gezeigten Methoden zu einer einzigen zusammenhängenden Linie kombinieren können.


cat myfile.txt
Linux is
the best
operating system

NOTE
Wenn Sie Daten über mehrere Dateien verteilt haben, können Sie den Befehl join verwenden, um den gesamten Text zu kombinieren. Während der join-Befehl eine ähnliche Funktion bietet, unterscheidet sich dies geringfügig von dem Szenario, mit dem wir unten arbeiten werden, da alle unsere Zeilen bereits in derselben Datei enthalten sind.

  1. Der Befehl paste ist wohl das einfachste Werkzeug für diese Aufgabe, daher werden wir es zuerst behandeln. Es ist normalerweise standardmäßig auf allen gängigen Linux-Distributionen installiert. Wir werden die Optionen -s und -d verwenden, um die Daten zeilenweise zusammenzuführen und jeweils ein benutzerdefiniertes Trennzeichen festzulegen. Dann geben wir ein Leerzeichen als Trennzeichen mit ' ' an und geben schließlich den Pfad zu unserer Eingabedatei ein.

    
    paste -sd ' ' myfile.txt
    Linux is the best operating system
    

    Abhängig von Ihrem Anwendungsfall können Sie ein anderes Trennzeichen festlegen, z. B. ein Komma:

    
    paste -sd ',' myfile.txt
    Linux is,the best,operating system
    
  2. Die nächste Methode, die wir verwenden können, ist die readarray-Funktion, die in die Bash-Shell integriert ist. Der Vorteil dieser Methode ist, dass wir keine zusätzlichen Werkzeuge benötigen, um die Arbeit zu erledigen.

    Bei dieser Methode wird jede Zeile der Eingabedatei in ein Array (in diesem Beispiel mit dem Namen myarray) geladen. Dann setzen wir die Variable IFS, die – für mehrere Bash-Tools – angibt, wie hoch das Trennzeichen sein muss, auf ein Leerzeichen (Sie können dies in ein beliebiges Zeichen ändern, um es Ihren Bedürfnissen anzupassen). Schließlich geben wir alle Werte des Arrays wieder.

    
    readarray -t myarray < myfile.txt; IFS=' '; echo "${myarray[*]}"
    Linux is the best operating system
    

    Beachten Sie, dass die Option -t von readarray alle Zeilenumbrüche in der Datei löscht, bevor die Werte in ein Array geladen werden.

  3. awk ist ein sehr vielseitiges Dienstprogramm, das auch verwendet werden kann, um die Daten aus jeder Zeile zu kombinieren.

    
    awk 'BEGIN{ORS=" "}1' myfile.txt 
    Linux is the best operating system
    

    In diesem Fall setzen wir den ORS-Wert auf ein Leerzeichen, um unseren Text als zusammenhängenden Satz ausgeben zu lassen. In anderen Fällen können Sie die Zeilen jedoch durch einen beliebigen Wert trennen, z. B. durch ein Komma:

    
    awk 'BEGIN{ORS=","}1' myfile.txt 
    Linux is,the best,operating system
    
  4. Der tr-Befehl ist auch ein Werkzeug, das das Verbinden von Linien sehr einfach erledigen kann. Hier geben wir an, dass wir alle Daten in jeder neuen Zeile mit '\n' kombinieren möchten, und geben dann ein Leerzeichen ' ' als Trennzeichen an.

    
    tr '\n' ' ' < myfile.txt
    Linux is the best operating system
    

    Versuchen wir nun, jede Zeile mit Kommas zu verbinden:

    
    tr '\n' ',' < myfile.txt
    Linux is,the best,operating system
    
  5. Haben Sie jemals eine Textmanipulationsaufgabe gesehen, die nicht von sed gelöst werden konnte? Wir auch nicht. In diesem Beispiel verwenden wir die Option -z, um die Eingabedatei als einzelne Zeile zu behandeln, und ersetzen dann jedes Zeilenumbruchzeichen (gekennzeichnet durch \n) durch ein Leerzeichen.

    
    sed -z 's/\n/ /g' myfile.txt 
    Linux is the best operating system
    

    Oder wenn Sie die Zeilen verbinden und mit einem anderen Zeichen trennen möchten, z. B. Kommas:

    
    sed -z 's/\n/,/g' myfile.txt 
    Linux is,the best,operating system
    

    Da die Option -z nur in neueren Versionen von sed verfügbar ist, hier eine weitere Option, die auf xargs basiert, um alle Zeilen in einer einzigen Zeile zu kombinieren, bevor die Verarbeitung an sed übergeben wird:

    
    xargs < myfile.txt | sed -e 's/ / /g'
    Linux is the best operating system
    

Abschließende Gedanken

In diesem Tutorial haben wir gesehen, wie man auf einem Linux-System mehrere Zeilen einer Datei zu einer einzigen Zeile zusammenfügt. Wie bei den meisten Dingen in Linux gibt es viele Tools für diese Aufgabe und viele Möglichkeiten, die Aufgabe zu erledigen. In den meisten Fällen funktionieren sie alle ungefähr gleich, und Sie können diejenige verwenden, die Sie für Ihre Situation für am besten geeignet halten. Wir haben auch gesehen, wie wir eine Vielzahl verschiedener Feldtrennzeichen und Trennzeichen verwenden können, um die Befehle an verschiedene Szenarien anzupassen.

Verwandte Artikel: