GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Sed Zeichen aus neuer Zeile entfernen?

Nach einiger Verarbeitung habe ich meine Eingabedatei wie unten.

Datei1.txt

12345|john|student
43321|jack|professor

78965|alex|lecturer

Ich muss die obige Datei weiter verarbeiten und brauche daher auch einen Zeilenumbruch am Ende der Zeile. Derzeit kann ich es wie folgt ausführen.

sed 's/$/|/' file1.txt

Der obige Befehl führt zur Ausgabe als,

12345|john|student|
43321|jack|professor|
|
78965|alex|lecturer|

Wie wir sehen können, ist der | wird auch an Leerzeilen angehängt. Als ich versuchte, | zu entfernen Zeichen wieder aus leeren Zeilen mit dem folgenden Befehl,

sed 's/|//g' file1.txt

Der | Charakter wird überall gelöscht. Wie kann ich nur den | löschen in Leerzeilen? Ich muss auch die Leerzeile beibehalten.

Akzeptierte Antwort:

Aus Ihrem Original können Sie | hinzufügen zu Zeilen, die nicht leer sind:

Mit sed :

sed -e '/^$/!s/$/|/' file

Mit perl :

perl -lpe 's/$/|/ if length' file

Wenn Sie | entfernen möchten aus Zeilen, die leer sind (in der zweiten Version):

perl -lpe 's/|// if length == 1'

Linux
  1. Kann Sed Zeilenumbrüche ersetzen?

  2. Effizient die ersten paar Zeilen aus einer Textdatei entfernen?

  3. Wie entferne ich eine einzelne Zeile aus dem Verlauf?

  4. Zeile entfernen, die bestimmte Zeichenfolge und die folgende Zeile enthält?

  5. Löschen bestimmter Zeilen aus einer Datei in der Linux-Befehlszeile

Verzeichnis in Linux entfernen – So löschen Sie einen Ordner von der Befehlszeile aus

So entfernen Sie Zeilen aus einer Datei mit dem Sed-Befehl

So entfernen Sie (^M) Zeichen aus einer Datei in Linux

So entfernen Sie alle Leerzeichen aus einer Textdatei

Entfernen Sie ungerade oder gerade Zeilen aus einer Textdatei

Entfernt eine bestimmte Zeile aus der Bash-Verlaufsdatei