Interpretation von ~ in sed

9

Ich lerne heutzutage sed. Es gibt diese Tilde '~', die mich mehr als alles andere verwirrt.

Zum Beispiel der Befehl

sed -n '1~2 w output.txt' input.txt

druckt die ungeradzahligen Zeilen (in die Datei output.txt).

Im selben Tutorial wird auch angegeben, dass Zeilen von 1 bis 2 übersprungen werden und dann die Zeilen neben Zeile 2 gedruckt werden, falls wir sie verwenden

sed -n '1~2 p' input.txt

Was ist die absolute Interpretation dieser Tilde?

Upendra Pratap Singh
quelle
Was genau sagt das Tutorial für das zweite Beispiel? "Überspringt Zeilen von 1 bis 2" ist keine genaue Beschreibung dessen, was dieser Befehl tut.
JigglyNaga

Antworten:

13

Dies ist eine GNU- sedErweiterung:

first~step

Ordnen Sie jede stepZeile beginnend mit der Zeile zu first. Druckt beispielsweise sed -n 1~2palle ungeradzahligen Zeilen im Eingabestream, und die Adresse 2~5stimmt mit jeder fünften Zeile überein, beginnend mit der zweiten. firstkann Null sein; sedfunktioniert in diesem Fall so, als wäre es gleich step. (Dies ist eine Erweiterung.)

Ihre beiden Beispiele stimmen mit denselben Zeilen überein, aber das erste schreibt ( w) sie in eine Datei, während das zweite sie ( p) druckt , wohin auch immer die Standardausgabe geht.

Beziehen Sie sich im Allgemeinen immer auf das Handbuch des Befehls. Das Handbuch ist selten mehrdeutig. Die Anwendung eines Befehls durch Kombinieren mehrerer Aspekte seiner Funktionalität kann in einem Lernprogramm manchmal schwierig zu erklären sein (und manchmal versucht ein Lernprogramm, die Dinge verständlicher zu machen, indem dieselbe Anweisung auf viele Arten umformuliert wird, was zu Verwirrung führen kann) Das Handbuch ist die eindeutige Referenz für jedes Bit dessen, was der aggregierte Befehl tut.

Kusalananda
quelle