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?
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.
(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.
Sie können etwas wie folgt verwenden:
%Vor%Dies wird das Ende der Zeile durch ein ',' ersetzen und in file_with_added_commas.txt
schreibenWeitere Informationen finden Sie unter: Text am Ende jeder Zeile hinzufügen Linie
Tags und Links command-line bash sed