2012-10-25 14 views
5

Ich habe eine Datei, die Zeilen der folgenden Form gibt:Zeilen aus einer Textdatei in Unix kombinieren?

$XYZ blah blah blah 
$XYZ something 
$XYZ random data 

Das „$ XYZ“ Präfix ist das gleiche für jede Zeile, es ist wirklich mit einem Dollarzeichen beginnt, und es ist höchst unwahrscheinlich, überall auftreten aber der Anfang einer Linie.

Die einzige Möglichkeit, die ich an dieser Datei erhalten kann, ist über Bildschirmaufnahme, die die Zeilen um 80 Zeichen umbrechen. So sieht es wie folgt aus (wenn Sie Verpackung so tun, als bei einer geringeren Anzahl als 80):

$XYZ blah bl 
ah blah 
$XYZ somethi 
ng 
$XYZ random 
data 

Ich mag die durchgezogenen Linien aus, dass neu erstellen. Ich könnte ein Programm schreiben, um es zu tun, aber ich denke, dass es einen Unix-Befehl geben könnte, den ich nicht kenne, der es leicht machen könnte. Irgendwelche Ideen?

Vielen Dank im Voraus.

+0

warum ein Screencapture? – njzk2

+0

Verrückte Sicherheitsberechtigungen auf verschiedenen Ebenen. Ich kann eine Katze machen, aber ich kann sie nicht anpatchen oder an irgendeinen Ort, von dem aus ich sie anpatschen konnte, oder irgendetwas anderes, an das ich denken konnte. – user1738853

+0

Wenn Sie in einem Terminalemulator eine "Katze" schreiben, werden die Zeilenumbrüche nicht clientseitig eingefügt, in welchem ​​Fall sollten Sie die Ausgabe irgendwie lokal pipen können? – lynks

Antwort

4

Zunächst verschmelzen alle Linien in einer langen Zeile und dann eine neue Zeile hinzufügen, wo immer Sie das Wort sehen, das soll der Beginn einer Linie sein, wie folgt aus:

tr -d '\n' < file | sed 's/XYZ/\nXYZ/g' 
+0

Ich war im Begriff, mit genau dieser – lynks

+0

Nein zu beantworten, aber vielleicht, weil ich die Regexp nicht richtig mache ... Ich hätte feststellen müssen, dass "XYZ" tatsächlich mit einem Dollarzeichen beginnt. – user1738853

+0

Verwenden Sie '\ $', um dem Dollar zu entkommen, d. H. 'Sed 's/\ $ XYZ/\ n $ XYZ/g'' – dogbane

1

In perl:

perl -pe 's/\n//g;s/XYZ\s+/\n$&/g' filename.txt 
+0

Version vereinfacht. –

1

Der paste Befehl ist für genau diesen Zweck:

paste -d "" - - 

Wie in

echo '$XYZ blah bl 
ah blah 
$XYZ somethi 
ng 
$XYZ random 
data' | paste -d "" - - 

Ausgänge

$XYZ blah blah blah 
$XYZ something 
$XYZ random data 
Verwandte Themen