Sed/Nächste Zeile beabeiten

Aus Foxwiki
Version vom 31. März 2023, 10:54 Uhr von Dirkwagner (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== Nächste Zeile beabeiten[n] == Soll erst die dem Suchmuster folgende Zeile manipuliert werden, ist das n-Kommando der beste Kandidat: '''sed -n '8,${n;s/\(.\{1,\}\)/*\1/p;}' test.txt''' * 9 Keine Angabe Alle Zeilen *11 $ Symbolisiert die letzte Zeile *13 RegEx Zeilen, die den Regulären Ausdruck enthalten Die Kommandozeile ist schwer verdaulich... * aber der Reihe nach: {|class="wikitable" |- ! | »-n« ! | als Kommandozeilenoption besagt,…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Nächste Zeile beabeiten[n]

Soll erst die dem Suchmuster folgende Zeile manipuliert werden, ist das n-Kommando der beste Kandidat:

sed -n '8,${n;s/\(.\{1,\}\)/*\1/p;}' test.txt
 * 9 Keine Angabe Alle Zeilen
 *11 $ Symbolisiert die letzte Zeile
 *13 RegEx Zeilen, die den Regulären Ausdruck enthalten

Die Kommandozeile ist schwer verdaulich...

  • aber der Reihe nach:
»-n« als Kommandozeilenoption besagt, dass die Ausgabe einzig die bearbeiteten Zeilen betreffen soll.
Da jedoch das Flag »s«  sämtliche Ausgaben »verschluckt«, muss »p« am Ende bemüht werden.
»8,$«  adressiert die Zeilen 8 bis zum Ende der Datei.
  • Die erste Zeile, die also gefunden wurde, ist die 8.
»n«  als Substitutionskommando bewirkt, dass die nächste Zeile bearbeitet wird - Zeile 9.
  • Diese 9.
  • Zeile wird nun substituiert.
».\{1,\}«  meint »mindestens ein (\{1,\}) beliebiges (.) Zeichen.
Da jede Zeile im Beispiel zumindest die Zeilenummer umfasst und das komplette Muster mit »\(...\)« gespeichert wird, erscheint die gesamte Zeile mit vorangestelltem Stern (*\1) in der Ausgabe...
Sed fährt mit der folgenden Zeile (10) fort, die (wegen Flag »n«) übersprungen wird.