Reguläre Ausdrücke beschreiben die Struktur einer Zeichenfolge und können sehr hilfreich sein.
^[0-9]{4} [A-Za-z. -]*$
Der Ausdruck ist ein Beispiel für einen Regulären Ausdruck, der noch einer Zeile mit Postleitzahl und Ortsname sucht. Im Folgenden wollen wir diesen genauer anschauen.
. | ein beliebiges Zeichen |
* | beliebig oft wiederholt (das Zeichen direkt davor) |
{n,m} | mindestens n maximal m mal wiederholt |
^ | der Beginn einer Zeile |
$ | das Ende einer Zeile |
[abc] | einer der Buchstaben zwischen [ und ] |
A-Z, a-z, 0-9 | alle Grossbuchstaben, Kleinbuchstaben, Ziffern |
(x|y) | x oder y |
\ | markiert, dass das folgende Zeichen als Zeichen und nicht als Symbol gemeint ist. |
Mit Hilfe der Tabelle kannst du den RegExp nun aufschlüsseln.
^
[0-9]
{4}
A-Z
, Kleinbuchstaben a-z
oder Punkt, Leerschlag und Bindestrich . -
*
$
Du siehst, RegExp sehen komplizierter aus als sie sind. Wenn du mehr wissen möchtest, findest du im Internet diverse Anleitungen zu Regulären Ausdrücken. Wo aber kannst du Reguläre Ausdrücke verwenden?
Für die Beispiele kannst du deine eigenen Dateien aus der Unix-Einführung verwenden, oder besser die Beispiel-Datei herunterladen. In der Beispiel-Datei haben die Befehle sicher alle einen Effekt.
Viele der Unix-Tools verstehen reguläre Ausdrück. So kannst du zum Beispiel in den meisten Suchfeldern von KDE RegExp verwenden. Insbesondere unterstützt die Suche von Kate Reguläre Ausdrücke. Im folgenden zwei weitere Tools bei denen Reguläre Ausdrücke besonders nützlich sind.
Auch grep versteht Reguläre Ausdrücke, allerdings
musst du dafür die Option -E verwenden.
egrep
ist ein Alias für diese Option.
Ausserdem musst du den RegExp in Anführungs- und Schlusszeichen setzen,
damit die Shell alle Zeichen richtig interpretiert.
grep -E 'g.' fruechte.txt grep -E '^pf.' fruechte.txt grep -E '.*e$' fruechte.txt grep -E '(an){2}' fruechte.txt
Bei pdfgrep kannst du ohne zusätzliche Option RegExp verwenden.
Sed
ist ein Stream EDitor.
Im Gegensatz zu einem normalen Editor, kannst du in sed eine Datei nicht
öffnen um sie anschliessend zu bearbeiten.
Du musst sed deine Anweisungen geben, bevor du deinen Befehl abschickst.
sed geht dann Zeile für Zeile durch die Datei und führt deinen Befehl aus.
Das Resultat wird auf der Standard-Ausgabe ausgegeben.
Um das zu Speichern, musst du diese in
eine Datei umleiten.
Das folgende Beispiel ersetzt in deiner Datei jedes Auftreten von an durch na.
sed 's/an/na/g' fruechte.txt
Das s zu Beginn des Befehls bedeutet, dass nun ein Ersetz-Befehl folgt (s von Suchen und Ersetzen). Das g am Ende verlangt "global", so dass nicht bloss der erste Treffer einer Zeile angepasst wird. Passe den Befehl an und schaue was du alles erreichen kannst. Kannst du mit eine Zeile löschen? (Ersetze sie mit nichts)
Wenn du in sed komplexere Ausdrücke verwenden möchtest, musst du die Option -r verwenden.
sed -r 's/(an){1,}//g' fruechte.txt
Schliesslich noch ein sehr nützlicher Link für sed-Benutzer. sed1line ist eine grosse Sammlung von hilfreichen sed-Befehlen.