LPIC101/103.7 Regulären Ausdrücke: Unterschied zwischen den Versionen
Zeile 54: | Zeile 54: | ||
* <code>+</code> bezeichnet, dass das voranstehende Zeichen mindestens einmal vorkommt | * <code>+</code> bezeichnet, dass das voranstehende Zeichen mindestens einmal vorkommt | ||
* <code>.</code> wird als Platzhalter für ein beliebiges Zeichen verwendet | * <code>.</code> wird als Platzhalter für ein beliebiges Zeichen verwendet | ||
== SED == | == SED == |
Version vom 14. Oktober 2024, 09:58 Uhr
topic - Kurzbeschreibung
Beschreibung
- Gewichtung
- 3
Begriffs- und Zeichenklärung
- Was sind reguläre Ausdrücke?
- Reguläre Ausdrücke erleichtern das durchsuchen von Texten
- Sie beschreiben anhand von Wildcards, Suchwörtern und Positionsangaben und ermöglichen so eine differenziertere Suche
- Wildcards werden auch Jokerzeichen genannt und sind Platzhalter für ein oder mehrere Zeichen
- Reguläre Ausdrücke werden in englisch Regular Expressions genannt
- Reguläre Ausdrücke werden meist mit RegEx oder RegExp abgekürzt
- Wo werden reguläre Ausdrücke verwendet?
- In allen Programmiersprachen
- Shell
- grep
- find
- vi(m)
- sed
- awk
- GUI
- Kate Editor
- In vielen weiteren Programmen (z. B. libreOffice)
Metazeichen
- Anker
Anker beschreiben die Position einer Suchanfrage
- Es können auch Zeichen und Zeichensätze angegeben werden, nach denen gesucht werden soll
Anker | Beschreibung |
---|---|
^ |
Textanker für Zeilenanfang |
$ |
Textanker für Zeilenende |
\< |
markiert einen Wortanfang |
\> |
markiert ein Wortende |
\ |
schützt ein Zeichen vor der Interpretation (z. B. \$ sucht nach Dollarzeichen und nimmt diesen seine Spezialbedeutung) |
[] |
sucht nach einem Zeichen oder einer Zeichenfolge innerhalb des eckig geklammerten Bereichs (z. B. [a-g] ) |
[^Zeichen] |
Schließt das Zeichen nach dem Circonflex aus der Suche aus |
Wildcards (Joker/Quantoren)
Wildcards beschreiben vorgehende und nachfolgende Zeichen.
*
bezeichnet keine oder beliebig viele Wiederholungen des vorangegangenen Zeichens?
bezeichnet keine oder eine Wiederholung des vorangegangenen Zeichens+
bezeichnet, dass das voranstehende Zeichen mindestens einmal vorkommt.
wird als Platzhalter für ein beliebiges Zeichen verwendet
SED
- Der Streamlineeditor sed
Der Editor sed arbeitet mit Strömen. Er liest in seiner puren Form StdIn (Kanal 0) und gibt in StdOut (Kanal 1) aus, ähnlich dem Befehl cat. Um das Ergebnis zu speichern muss man eine extra Zieldatei angeben. Quelle und Ziel dürfen nicht identisch sein.
Wichtige Kommandos und Optionen
-e Kommando
– Kündigt ein Kommando an. Dies ist nur nötig, wenn mehrere Kommandos aufeinander folgen sollen.-f Scriptdatei
– Lädt mehrere Kommandos aus einem Script. Besonders praktisch, wenn eine bestimmte Kommandoroutine mehrmals aufgerufen werden soll.-g
– sed sucht normalerweise nur innerhalb einer Zeile. Die Option g setzt das Suchverhalten auf global und lässt sed somit auch nach einem Fund weitersuchen.
Adressierung mit sed
Der Editor sed sucht und bearbeitet Zeilen innerhalb einer Datei. Manchmal ist es nötig den Arbeitsbereich einzuschränken. Dies kann auf drei Arten geschehen : 1. Angabe von Zeilennummern 2. Verwendung des $ Zeichens für die Bearbeitung der letzten Zeile 3. Verwendung von regulären Ausdrücken (auf beiden Seiten mit Slashes begrenzt nach dem Muster /regEx/ )
Wird keine Adressierung vorgenommen so bearbeitrt sed die gesamte Datei.
Beispiele für das Arbeiten mit sed
sed kann mit dem Kommando "y" ähnlich wie translate (Siehe 103.2) einzelne Zeichen suchen und ersetzen. Im Gegensatz zu translate kann sed die Änderungen jedoch in einer neuen Datei abspeichern. Dabei kann für jedes Zeichen nur ein Zeichen ersetzt werden, keine Zeichenkette (1:1 Beziehung).
In dem folgenden Beispiel wird ein Komma mit einem Semikolon ersetzt.
# sed 'y/,/;/' Kommadatei > Semikolondatei
# sed -e '/^$/d' -e '/^#/d' /etc/config.conf
– Das -e leitet jeweils ein Kommando ein. Die RegEx müssen innerhalb von Slashes stehen. Der Befehl "d" löscht das Suchergebnis. "/^$/" sucht von Zeilenanfang bis Zeilenenede. "/^#/" sucht Rauten am Zeilenanfang. Somit werden bei diesem Befehl Kommentarspalten und Leerzeilen gelöscht.# sed '25,47d' Originaldatei > Kurzdatei
– In diesem Befehl wird zur Adressierung die Zeilenangabe verwendet. Es werden also Zeile 25 und 47 gelöscht. Das Kommando kann durch ein "!" invertiert werden ("25,45!d").
archangel:/textfiles # sed 's/ue/ü/' Namensliste
– Das Kommando s substituiert Zeichen. Es ist leistungsfähiger als y, da es ein Zeichen auch durch eine Zeichenkette ersetzen kann und umgekehrt. In diesem Beispiel wird ein "ue" mit einem "ü" ersetzt. Mit diesem Befehl wird allerdings lediglich der erste gefundene String mit "ue" durch "ü" ersetzt. Durch das setzen der globalen Option "g" werden alle "ue"'s im Text mit "ü" ersetzt :archangel:/textfiles # sed 's/ue/ü/g' Namensliste
Skripte in sed
Man kann mitels Skripten eine Befehlskette durch sed ausführen lassen.
In dem folgenden Beispiel werden Umlaute (Ä,ä,Ü,ü,Ö,ö und ß) mit HTML tauglichen Zeichenketten ersetzt ("Ä" ist beispielsweise in HTML "Ä"). Das Skript wird mit cat (siehe 103.2) erstellt und heisst sedskript :
# cat sedskript s/ä/\ä\;/g; s/Ä/\Ä\;/g; s/ü/\ü\;/g; s/Ü/\Ü\;/g; s/ö/\ö\;/g; s/Ö/\Ö\;/g; s/ß/\ß\;/g;
Anschließend kann das Skript mit der Option -f eingelesen werden. Es müssen nun lediglich Quell- & Zieldatei angegeben werden und die Befehle in dem Skript werden auf die Quelldatei angewandt.
# sed -f sedskript Quelltext-mit-Umlauten > Zieltext-in-HTML-Format
Anwendung
Fehlerbehebung
Konfiguration
Dateien
Anhang
Test
Wonach sucht RegEx ^[^#]
Sie geben im Kate Editor unter Suchen ohne RegExp "a*" ein. Was erhalten Sie als Antwort?
Sie geben in der Kate-Suche mit RegEx a* ein, was erhalten Sie als Antwort?
Sie geben in der Shell den Befehl ls a* ein, was erhalten Sie als Antwort?
Sie geben in der Shell den Befehl ls a??? ein, was erhalten Sie als Antwort?
Wie können Sie sich alle Einträge vom 10ten Dezember im Systemlog ansehen?
Wonach sucht das folgende RegEx Kommando : # grep –w '[0-9]\{3\}' Suchdatei ?
Wonach sucht das folgende RegExp Kommando : # grep '[A-Z]\+' Suchdatei ?
archangel:/textfiles # sed 's/ae/ä/g' DeutscherText.txt
? Siehe auch
Dokumentation
Man-Pages
Info-Pages
Links
Projekt
Weblinks