2017-07-07 3 views
1

ist es möglich, die Platzierung von Zeilen in Bash mit einer Zeichenfolge in den Zeilen mit sed?Switch-Zeilen-Platzierungen in Bash

Zum Beispiel:

Ich habe die Linien

2. diskusage1: 27.0572519084 
3. partition1: 

die beiden Ausgänge als Teil eines bash Befehl in eine Textdatei sind.

Gibt es eine Möglichkeit, die Reihenfolge dieser Zeilen umzukehren? Haben sie Orte wechseln wie folgt aussehen:

3. partition1: 
2. diskusage1: 27.0572519084 

Dank

+0

Ja, die Ausgabe des, was auch immer, um die Ausgabe produziert 'tac' (das ist' cat' in umgekehrter Richtung), z.B. 'some_command | tac'. Wenn Sie es umgekehrt zur Datei schreiben müssen, dann 'some_command | tac> file.txt' Beispiel: 'printf '2. diskusage1: 27.0572519084 \ n3. partition1: \ n" | tac' –

+0

Wenn Sie 'sed' verwenden müssen, dann' some_command | sed -n '1! G; h; $ p'' –

+0

Um zu beliebigen Zeilen zu wechseln, müssen Sie sich [diese Frage] ansehen (https://stackoverflow.com/questions/4331851/swapping-two-lines) –

Antwort

2

aus den Kommentaren Fortsetzung, ja, können Sie leicht die Linien der Ausgang umgekehrt entweder tac (cat in umgekehrter Reihenfolge) oder sed. In beiden Fällen leiten Sie einfach die Ausgabe des Befehls, den Sie gerade ausführen, an tac oder sed. Wenn Sie die umgekehrt Inhalt in eine Datei schreiben müssen, dann fügen Sie einfach eine Umleitung bis zum Ende (zB > file.txt)

Mit tac es ist einfach

some_command | tac > file.txt 

sed Mit ihm wäre:

some_command | sed -n '1!G;h;$p' > file.txt 

Beispiel

Ihre Ausgabe:

$ printf "2. diskusage1: 27.0572519084\n3. partition1:\n" 
2. diskusage1: 27.0572519084 
3. partition1: 

Reversed Ausgang

$ printf "2. diskusage1: 27.0572519084\n3. partition1:\n" | tac 
3. partition1: 
2. diskusage1: 27.0572519084 

oder

$ printf "2. diskusage1: 27.0572519084\n3. partition1:\n" | sed -n '1!G;h;$p' 
3. partition1: 
2. diskusage1: 27.0572519084 

sie auszuprobieren und lassen Sie mich wissen, wenn Sie weitere Fragen haben.

+0

Sieht so aus als wären die 2. und 3. nicht nur Linien. – hedgar2017

+0

Ja, einverstanden, guter Punkt, aber ich kann nur weitermachen, was in der Frage steht. Wenn es 1-50 ist, dann würden wir eine kreative Verwendung eines Zählers und "Lese" oder "Lesearray" mit "tac" oder einen Ausschlussbereich mit "sed" oder eine Kombination von "head" und "tail" mit entweder 'benötigen :) '. –

0

Das tun:

command | sed '2{h;d};3{p;x}' > file.txt