sed: Zwei Zeilen abgleichen

sed: Zwei Zeilen abgleichen

Ich habe eine Textdatei, deren Datensätze auf zwei Zeilen aufgeteilt sind. Ich möchte sie in einer Zeile zusammenfassen. Die Datensätze sehen ungefähr so ​​aus:

2013-07-29
 apt-get install git
2013-07-29
 apt-get install rsync
2013-07-31
 apt-get install nmap
2013-08-02
 apt-get install cifs-utils
2013-08-05
 apt-get install telnet

Ich möchte mir folgendes zulegen:

2013-07-29 apt-get install git
2013-07-29 apt-get install rsync
2013-07-31 apt-get install nmap
2013-08-02 apt-get install cifs-utils
2013-08-05 apt-get install telnet

Ich habe es mit versucht sed, aber ich kann die beiden Zeilen nicht zuordnen. Gibt es einen Trick in sedoder ein besseres Tool?

Antwort1

sed 'N;s/\n/ /'
  • Nverbindet die nächste Eingabezeile mit dem Musterraum
  • s/\n/ /ersetzt die neue Zeile, die die Zeilen durch ein Leerzeichen trennt.

oder:

sed -n 'N;s/\n/ /;/regex/p'
  • -ndeaktiviert das automatische Drucken des Musterbereichs als letzten Befehl
  • /regex/pdruckt Zeilen, die mit regulären Ausdrücken übereinstimmen

Verwenden Sie den gModifikator für die Ersetzungen, wenn Sie mehr als zwei Zeilen verbinden, z. B. N;N;N;s/\n/ /g.

Antwort2

Es scheint, dass den apt-getZeilen ein Leerzeichen vorangestellt ist. Es heißt:

sed -e :a -e '$!N;s/\n / /;ta' -e 'P;D' inputfile

sollte das gewünschte Ergebnis erzielen.

Alternativ können Sie auch Folgendes verwenden paste:

paste -d' ' - - < inputfile

verwandte Informationen