sed
ist ein Textwerkzeug. Standardmäßig gibt es eine Zeile Ausgabe pro Zeile Eingabe aus. Es ist zwar einfach, Zeilenumbrüche in die Ausgabe einzufügen (wodurch mehr Zeilen erzeugt werden), aber es ist nicht so einfach, Zeilenumbrüche von der Eingabe zu entfernen, da sie nicht wirklich zu den Zeilen gehören, die verarbeitet werden, sondern sie trennen.
Auszug aus info sed
(Hervorhebung meines):
sed
führt den folgenden Zyklus für jede Eingabezeile aus: Zuerstsed
liest er eine Zeile aus dem Eingabestrom, entfernt alle nachgestellten Zeilenumbrüche und platziert sie im Musterbereich. Dann werden Befehle ausgeführt. […].
Es ist jedoch N
:
N
Fügen Sie dem Musterbereich eine neue Zeile hinzu und hängen Sie dann die nächste Eingabezeile an den Musterbereich an. Wenn keine weiteren Eingaben vorhanden sind, wird dersed
Befehl beendet, ohne weitere Befehle auszuführen.
Damit können Sie Linien paarweise bearbeiten, das ist es, was Sie brauchen. Fügen Sie N
in Ihrem letzten sed
wie folgt hinzu :
sed -e 'N;s/dBm\n/dBm /'
Beachten Sie, dass dies nur funktioniert, wenn die gesamte Eingabe logisch aus Zeilen besteht, die paarweise verarbeitet werden sollen, dh diese logische Struktur ist in Ordnung:
line 1 paired 1 line 2 paired 2 …
während dieser ist nicht:
header line 1 paired 1 line 2 paired 2 …
In diesem Fall sed
wird header
mit line 1
, paired 1
mit line 2
usw. gegen Ihre Logik gepaart. Ein anderes schlechtes Beispiel:
line 1 paired 1 excessive line line 2 paired 2 …
Das excessive line
wird mit gepaart line 2
. Dadurch wird die Logik aufeinander folgender Paare zerstört.
Also musst du vorsichtig sein. Wenn jedoch nur die Zeilen richtig gepaart sind, müssen Sie sich keine Gedanken darüber machen, welche Zeilenumbrüche Sie ersetzen, da Sie die Trennungspaare sowieso nicht ändern können. Aus diesem Grund ist das Einfügen dBm
in Ihr Muster jetzt völlig überflüssig. Ihr letzter sed
kann auch sein:
sed -e 'N;s/\n/ /'
Wenn Sie eine komplexere Logik benötigen, lesen Sie diese Antwort . Es verwendet sed
Linien nach ihrem Inhalt verketten.