Wie kann ich ein Komma am Ende jeder Zeile mit Ausnahme der letzten Zeile hinzufügen?

8

Ich möchte ein Komma am Ende jeder Zeile dieser Dateityp mit Ausnahme der letzten Zeile hinzufügen:

Ich habe das jetzt:

%Vor%

Ich will das:

%Vor%

Wie kann ich das mit der Kommandozeile machen? Ist das mit dem Befehl sed möglich?

    
Joan Triay 26.01.2016, 18:49
quelle

3 Antworten

26

Das folgende Skript sed hat einen Adressausdruck $! , der mit Zeilen übereinstimmt, die nicht die letzten sind, und eine Substitutionsaktion s/$/,/ , die ein Komma neben dem Zeilenende hinzufügt.

%Vor%

(Der $ in der Adresse bezieht sich auf die letzte Zeile , während sich die $ im regulären Ausdruck in der Substitution auf die letzte Zeichenposition bezieht Linie. Sie sind nicht verwandt, obwohl in gewissem Sinne ähnlich.)

Dies druckt den geänderten Inhalt von file auf die Standardausgabe; Umleiten zu einer anderen Datei, um sie in einer Datei zu speichern, oder sed -i verwenden, wenn Ihr sed dies unterstützt. (Einige Varianten erfordern ein leeres Argument für die Option -i , insbesondere * BSD / OSX sed .)

Wenn Ihre Aufgabe darin besteht, aus etwas, das nicht gültig ist, gültige JSON zu erzeugen, bin ich skeptisch gegenüber diesem Ansatz. Strukturierte Formate sollten mit Werkzeugen manipuliert werden, die strukturierte Formate verstehen, keine grundlegenden zeilenorientierten Werkzeuge; Wenn dies jedoch hilft, zeilenorientierte Daten in Richtung JSON zu konvertieren, ist das wahrscheinlich eine sinnvolle Verwendung.

... Vielleicht möchten Sie die Ausgabe später auch in eckige Klammern setzen. Dann ist es tatsächlich technisch gültige JSON (vorausgesetzt, jede Zeile ist ein gültiges JSON-Fragment für sich).

%Vor%

Ersetzen Sie in der ersten Zeile (Adressenausdruck 1 ) in einer öffnenden eckigen Klammer am Zeilenanfang ( s/^/[/ ). Bei Zeilen, die nicht die letzten sind, fügen Sie wie oben ein abschließendes Komma hinzu. Auf der Zeile, die ist die letzte (Adresse Ausdruck $ ) fügen Sie eine schließende eckige Klammer am Ende der Zeile ( s/$/]/ ). Wenn Sie Zeilenumbrüche mit Semikolon bevorzugen, ist das in Ordnung; Viele sed -Dialekte erlauben Ihnen auch, diese in mehrere -e -Argumente aufzuteilen.

    
tripleee 26.01.2016, 18:57
quelle
-1

Halten Sie es einfach, verwenden Sie einfach awk:

%Vor%     
Ed Morton 26.01.2016 23:41
quelle
-2

Sie können etwas wie folgt verwenden:

%Vor%

Dies wird das Ende der Zeile durch ein ',' ersetzen und in file_with_added_commas.txt

schreiben

Weitere Informationen finden Sie unter: Text am Ende jeder Zeile hinzufügen Linie

    
bhasan 26.01.2016 18:58
quelle

Tags und Links