UNIX: Ersetzen Newline w/ Doppelpunkt, Erhaltung Newline Vor EOF

Ich habe eine text-Datei ("INPUT.txt") das format:

A<LF>
B<LF>
C<LF>
D<LF>
X<LF>
Y<LF>
Z<LF>
<EOF>

die ich brauche, um neu formatieren zu:

A:B:C:D:X:Y:Z<LF>
<EOF>

Ich weiß, Sie können dies tun, mit 'sed'. Es gibt eine Milliarde von google hat dies zu tun mit 'sed'. Aber ich versuche, den Schwerpunkt auf Lesbarkeit, Einfachheit, und über das richtige Werkzeug für den richtigen job. 'sed' ist ein Zeileneditor, der verbraucht, und verbirgt Zeilenumbrüche. Wahrscheinlich nicht das richtige tool für diesen job!

Ich denke, das richtige Werkzeug für diese Aufgabe wäre, 'tr'. Ich kann alle ersetzen die Zeilenumbrüche durch Doppelpunkte mit dem Befehl:

cat INPUT.txt | tr '\n' ':'

Es ist zu 99% meiner Arbeit. Ich habe ein problem, jetzt, aber. Durch das ersetzen alle Zeilenumbrüche durch Doppelpunkte, ich nicht nur ein überflüssiger Doppelpunkt am Ende der Folge, aber ich verlieren auch die Zeilenschaltung am Ende der Eingabe. Es sieht wie folgt aus:

A:B:C:D:X:Y:Z:<EOF>

Nun, ich muss entfernen Sie den Doppelpunkt aus dem Ende der Eingabe. Jedoch, wenn ich versuche zu übergeben, diese verarbeitet die Eingabe durch " sed "zu entfernen, der Letzte Doppelpunkt (das wäre jetzt, glaube ich, eine ordnungsgemäße Verwendung von "sed"), finde ich mich mit einem zweiten problem. Der Eingang ist nicht mehr abgeschlossen durch ein newline an alle! 'sed' versagt völlig, für alle Befehle, weil es nie findet das Ende der ersten Zeile der Eingabe!

Wie es scheint, gefolgt von einem Zeilenvorschub, um das Ende der Eingabe ist eine sehr, sehr häufige Aufgabe, und bedenkt, dass ich mich gerade schwer in Versuchung, ein Programm zu schreiben, es zu tun in C (das würde etwa acht Zeilen code), kann ich mir nicht vorstellen, dass es da nicht schon eine sehr einfache Möglichkeit, dies zu tun mit den tools, die bereits in den Linux-kernel.

InformationsquelleAutor Maarx | 2010-05-26
Schreibe einen Kommentar