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'