Unix / Linux - Reguläre Ausdrücke mit SED
Hallo zusammen, zukünftige Kommandozeilen-Zauberer! Heute tauchen wir in die magische Welt der regulären Ausdrücke (regex) und der mächtigen SED-Kommando in Unix/Linux ein. Setzt euch an die Riemen, denn wir machen uns auf zu einem aufregenden Abenteuer, das die Art und Weise, wie ihr Text manipuliert, verändern wird!
Aufruf von sed
Lassen wir mit den Grundlagen beginnen. SED, was für "Stream Editor" steht, ist ein leistungsstarkes Textverarbeitungstool. Um es zu verwenden, tippen wir einfach "sed" gefolgt von unseren Befehlen. Es ist, als würde man einen textmanipulierenden Genius herbeirufen!
sed 'Befehl' Dateiname
Zum Beispiel:
sed 's/hello/bonjour/' begruessungen.txt
Dieser Befehl ersetzt "hello" durch "bonjour" in der Datei begruessungen.txt. Einfach, oder?
Die allgemeine Syntax von sed
Die allgemeine Syntax für sed ist wie ein magischer Spruch:
sed OPTIONEN... [SKRIPT] [EINGABEDATEI...]
Macht euch keine Sorgen, wenn das initially abschreckend aussieht. Wir werden es Schritt für Schritt auseinandernehmen, wie ein spannendes Puzzle!
Alle Zeilen mit sed löschen
Wollt ihr den gesamten Text in einer Datei verschwinden lassen? Sed kann das! Hier ist, wie man es macht:
sed 'd' Dateiname
Das löscht alle Zeilen in der Datei. Es ist, als würde man einen Radiergummi auf eurem digitalen Notizbuch verwenden!
Adressen in sed
Adressen in sed sind wie GPS-Koordinaten für euren Text. Sie sagen sed, wo es seine Magie anwenden soll. Hier sind einige Beispiele:
sed '2d' Datei.txt # Löscht die 2. Zeile
sed '/Muster/d' Datei.txt # Löscht Zeilen, die 'Muster' enthalten
Adressbereiche in sed
Manchmal möchten wir unsere Magie auf einen Bereich von Zeilen anwenden. Hier ist, wie man das macht:
sed '2,5d' Datei.txt # Löscht Zeilen 2 bis 5
sed '2,$d' Datei.txt # Löscht von Zeile 2 bis zum Ende der Datei
Der Ersatz-Befehl
Der Ersatz-Befehl ist das daily Bread und Butter von sed. Es ist wie "suchen und ersetzen" auf Steroiden!
sed 's/alt/neu/' Datei.txt
Das ersetzt die erste occurrence von "alt" durch "neu" in jeder Zeile.
Ersatz-Flags
Flags sind wie Power-ups für eure Ersatz-Befehle. Hier ist eine Tabelle der häufigsten Flags:
Flag | Beschreibung |
---|---|
g | Ersetzt alle Vorkommen, nicht nur das erste |
i | Ignoriert Groß- und Kleinschreibung |
p | Druckt die geänderte Zeile |
w | Schreibt das Ergebnis in eine Datei |
Beispiel:
sed 's/cat/hund/g' tiere.txt
Das ersetzt alle Vorkommen von "cat" durch "hund".
Verwendung eines alternativen String-Trenners
Manchmal enthält euer Text viele Schrägstriche. Keine Sorge! Wir können verschiedene Trenner verwenden:
sed 's#/usr/local/bin#/common/bin#' pfade.txt
Hier verwenden wir '#' als unseren Trenner anstelle von '/'.
Ersetzen durch leeren Raum
Wollt ihr Text verschwinden lassen, ohne eine Spur zu hinterlassen? Hier ist, wie man es macht:
sed 's/unerwünscht//g' Datei.txt
Das entfernt alle Vorkommen von "unerwünscht" aus der Datei.
Adressen und Ersatz
Wir können Adressen mit Ersatz kombinieren, um präzise Textoperationen durchzuführen:
sed '3,6s/foo/bar/g' Datei.txt
Das ersetzt alle "foo" durch "bar", aber nur in den Zeilen 3 bis 6.
Der Übereinstimmungs-Befehl
Der Übereinstimmungs-Befehl ist wie ein Spotlight, der die Zeilen beleuchtet, die uns interessieren:
sed -n '/Muster/p' Datei.txt
Das druckt nur die Zeilen, die "Muster" enthalten.
Verwendung regulärer Ausdrücke
Jetzt kommen wir zur echten Magie! Reguläre Ausdrücke sind wie Wildcards auf Steroiden. Hier ist ein einfaches Beispiel:
sed -n '/^The/p' geschichte.txt
Das druckt alle Zeilen, die mit "The" beginnen.
Passende Zeichen
Reguläre Ausdrücke haben spezielle Zeichen, die wie Shapeshifter funktionieren:
Zeichen | Bedeutung |
---|---|
. | Jedes einzelne Zeichen |
* | Null oder mehr des vorherigen Zeichens |
^ | Anfang der Zeile |
$ | Ende der Zeile |
Beispiel:
sed -n '/c.t/p' tiere.txt
Das passt zu "cat", "cot", "cut" usw.
Klassenschlüsselwörter
Zeichensätze sind wie Mannschaften von Zeichen. Hier sind einige MVP-Spieler:
Klasse | Passt zu |
---|---|
[:alpha:] | Alphabete Zeichen |
[:digit:] | Numerische Zeichen |
[:alnum:] | Alphanumeric Zeichen |
Beispiel:
sed -n '/[[:digit:]]/p' daten.txt
Das druckt Zeilen, die jede Zahl enthalten.
Ampersand-Referenz
Das Ampersand (&) ist wie ein magischer Spiegel, der das Gepaarte reflektiert:
sed 's/[0-9]/(&)/' zahlen.txt
Das setzt Klammern um jede Zahl.
Verwendung mehrerer sed-Befehle
Wollt ihr mehrere Zauber gleichzeitig wirken? Verwendet die -e-Option:
sed -e 's/foo/bar/g' -e 's/baz/qux/g' Datei.txt
Das führt zwei Ersatz-Operationen gleichzeitig aus!
Rückverweise
Rückverweise sind wie Zeitmaschinen, die es uns ermöglichen, Teile der Übereinstimmung wiederverwenden:
sed 's/\(.*\):\(\(.*\)/\2:\1/' namen.txt
Das tauscht den Text vor und nach einem Doppelpunkt aus.
Und das war's, meine lieben Schüler! Wir haben die Länder von sed und regulären Ausdrücken bereist. Denkt daran, Übung macht den Meister. Also auf in die Welt und manipuliert Text wie die Kommandozeilen-Zauberer, die ihr werden werdet! Frohes Coden!
Credits: Image by storyset