Regular Expressions in Programmen

RE In Programmiersprachen und Anwendungen

Reguläre Ausdrücke (Regular Expressions, RE) sind Standard-Technik zur Verarbeitung von Strings und Texten.
Regular Expressions sind offen und lizenzfrei zugänglich. RE sind zwar vermutlich (?) nicht offiziell standardisiert, jedoch weitgehend portabel.
Alle modernen Programmiersprachen und viele weitere Programme unterstützen RE.
Auf dieser Seite finden sie einige knapp gefasste Beispiele für die Anwendung von RE in gängigen Programmiersprachen.
Regular Expressions Regular Expressions Einführung in das Thema 'Regular Expressions' (RE)
RE - Syntax Grammatik der Regular Expressions (mit Beispielen)
Live RE Online Live mit RE experimentieren
LibreOffice Suchen und Ersetzen von Steuerzeichen in LibreOffice oder OpenOffice
Perl Perl ist die angestammte Heimat der RE !
Javascript Javascript bringt RE auf Webseiten
Java Seit Java 2 / 1.4 werden auch RE von Sun-Java unterstützt.
PHP Modul standard / pcre bietet RE-Standardfunktionen
Python Jung und flexibel, unterstützt RE
SQL Der DB-Server MySQL bietet Text-Suche mit Regexp
VB Spät aber doch, eine halbherzige Lösung von M$
Programme Viele Linux- Programme, Automatisierung der Serververwaltung, ...
Beispiele Programmierung an typischen Beispielen
Links RegExp Links Ausgewählte Links zum Thema "Regular Expressions"

Reguläre Ausdrücke in LibreOffice oder OpenOffice

LibreOffice und OpenOffice sind kostenfreie Office-Pakete in professioneller Qualität. Man kann die Programme für alle gängigen Betriebssysteme und sogar in einer portablen Version (für USB-Stick) aus dem Internet laden.
LibreOffice ist in jeder gängigen Linux-Distribution enthalten und ist auch für Windows-PC sehr empfehlenswert.
Im LibreOffice Programm Writer (Textverarbeitung) ist eine Funktion zur Anwendung von Regulären Ausdrücken enthalten. Sie wird zur Manipulation der nicht druckbaren Steuerzeichen verwendet.

Anwendung

Verwenden sie im Programm LibreOffice Writer den Menü-Befehl Bearbeiten | Suchen & ersetzen oder die Tasten Strg-F
Das Fenster 'Suchen und Ersetzen' wird geöffnet. In dieser einfachen Form kann man nach normalen 'lesbaren' Texten suchen oder diese ersetzen.

Zur Anwendung auf Steuerzeichen oder andere Sonderzeichen klicken sie Taste Mehr Optionen und markieren das Kästchen Regulärer Ausdruck.
Danach wird jede Eingabe in das Feld Suchen nach als Regulärer Ausdruck interpretiert.

Absatz

Die 'Einheit' jedes Textverarbeitungs-Programms ist der Absatz. Wenn nicht anders festgelegt, dann werden die jeweiligen RegExp auf jeden Absatz angewendet. Als 'Text zur Bearbeitung' zählen alle Zeichen zwischen dem Anfang der ersten Absatz-Zeile und dem nicht druckbaren Absatz-Zeichen  

Absatz-Zeichen:
Bei der Suche nach dem Absatz-Zeichen selbst gibt man ein
Suchen nach $
Mit Suchen findet man das Ende des nächsten Absatzes.
Mit Ersetzen wird die nächste Absatz-Marke durch den angegebenen Text ersetzt bzw. bei leerem Ersatz-Text gelöscht.
Mit Ersetze alle werden alle Absatz-Marken ersetzt bzw. gelöscht.

Absatz-Ende
Suchen nach Test$
findet dagegen alle Absätze, die genau mit den Zeichen 'Test' enden
Suchen nach Test.$
Findet alle Absätze, die mit Test und danach einem beliebigen Zeichen enden, z.B. mit einem Punkt oder einem ! Rufzeichen. Der Punkt ist ein Joker für 'genau 1 beliebiges Zeichen'.
Suchen nach \.$
Findet alle Absätze, die mit einem Punkt-Zeichen enden. Damit der Punkt nicht als RegExp-Joker gilt, wird er mit einem vorangestellten \ Backslash maskiert.
Suchen nach [^\.]$
Findet alle Absätze, die nicht mit einem Punkt enden.

Absatz-Beginn
Suchen nach ^xyz
Das ^ Zeichen markiert den Beginn jedes Absatzes.
^Test findet z.B. alle Absätze, die mit dem Wort-(Anfang) Test beginnen.

Absatz-Länge
Suchen nach ^.{10,100}$
findet alle Absätze mit 10 bis 100 beliebigen Zeichen zwischen ^ Beginn und $ Ende. Jeder 'weiche' Zeilen-Umbruch unterbricht jedoch die Rechnung..

Leere Absätze:
Suchen nach ^$
Das ^ Zeichen markiert den Beginn, das $ Zeichen das Ende jedes Absatzes. Der Ausdruck ^$ findet daher alle leeren Absätze (die man entfernen sollte !).

Absatz einfügen:
Um eine Absatz-Marke an bestimmten Text-Stellen neu einzufügen, gibt man ein
Ersetzen durch \n
Achtung: Bei Anwendung von \n im Feld 'Suchen nach' findet man nicht Absätze, sondern Zeilen-Umbrüche !

Tabulator

Suchen nach \t
findet den nächsten Tabulator. Mit Ersetze alle werden alle Tabulatoren durch die angebenen Zeichen ersetzt.

Zeilen-Umbruch

Suchen nach \n
findet den nächsten (weichen) Zeilen-Umbruch, d.h. ein Steuerzeichen für 'Neue Zeile' innerhalb eines Absatzes. Findet keine 'echten' Absätze !

Sonderzeichen

Suchen nach \x40
findet das nächste @ Zeichen, das mit dem ASCII-Code dezimal 64 = hex #40 codiert ist.
Durch Angabe des hexadezimalen → ASCII-Codes oder des → Unicode kann man jedes beliebige Zeichen finden, z.B.
Suchen nach \x20AC
findet dasEuro-Zeichen. Mit dieser Methode findet man u.a. auch griechische oder kyrillische Zeichen, mathematische Sonderzeichen usw.
RegExp-Links Hilfe zu den in LibreOffice verwendbaren Regulären Ausdrücken:
http://help.libreoffice.org/Common/Find_and_Replace/de
http://help.libreoffice.org/Writer/Finding_and_Replacing_in_Writer/de
http://help.libreoffice.org/Writer/Using_Wildcards_in_Text_Searches/de
http://help.libreoffice.org/Common/List_of_Regular_Expressions/de
http://help.libreoffice.org/Common/List_of_Regular_Expressions
http://wiki.services.openoffice.org/wiki/Documentation/How_Tos/Regular_Expressions_in_Writer

Regular Expressions in Perl

Perl ist die angestammte Heimat der RegExp und unterstützt sie vorbildlich. Perl bietet für RegExp weit mehr Funktionalität als hier gezeigt werden kann. Details in der Original Perl-Doku unter perlrequick und perlretut
Funktion Syntax Beispiel
match $t =~ m/RE/flg 'Test' =~ m/e/   ergibt true, weil Zeichen 'e' im Text 'Test' enthalten ist
single $t =~ ?RE? Einmaliger Test. Wird bis zum nächsten Reset nur einmal ausgeführt.
Anwendung zur einmaligen Suche innerhalb von größeren Texten.
replace $t =~ s/RE/by/flg $t = 'Test';
$t =~ s/T/F/;
  ergibt 'Fest', weil T durch F ersetzt wird.
store $t =~ m/(RE)/flg Ausdrücke in () werden gespeichert und sind in $1,$2,.. verfügbar.
$t = 'test.dat';
$T =~ m/(.+)\.(.+)/;
$fn = $1;
  ergibt 'test': alle Zeichen .+ vor dem Punkt \.
$fe = $2;   ergibt 'dat': alle Zeichen .+ nach dem Punkt \.
split @s = split(/RE/flg,$t) Trennt einen String nach der RE, gibt ein → Array zurück.
$t = '2004-05-20';
($y,$m,$d) = split(/-/,$t);
  trennt ein ISO-Datum nach Minus-Zeichen als Separator.
once
$t =~ m/RE/o
Der nachgestellte Operator o bedeutet 'once'. Der RE wird nur einmalig compiliert. Verwendung für RE in Schleifen, die nur einmal berechnet und danach beliebig oft verwendet werden.
pos
$t =~ m/RE/g
$p = pos($t);
Nur mit dem nachgestellten Operator g (global) wird Funktion pos (match-position) initialisiert. Man kann die match-Position lesen oder als Start-Position für den nächsten match-Versuch schreiben.
Vorsicht: pos ist vor einem match undefiniert, und wird bei erfolglosem match nicht geändert !
Das Beispiel liefert alle match-Positionen (hier 3 Treffer für das Zeichen s ):
$t = 'Das ist ein Test';
while ($t =~ m/s/g) {
print 'match at pos = '.pos($t)."\n";
}
Einige der → vordefinierten Perl-Variablen betreffen RE   ( '=' steht für äquivalente Variablen in Lang- und Kurzform)
Testen sie Kurzform und Langform mit ihrer Perl-Version !
  $1, $2, $3, ... Erster, zweiter, dritter ... in () gespeicherter String. - Häufig verwendet.
$LAST_PAREN_MATCH = $+ Der letzte gespeicherte String.
Achtung: Diese und die folgenden 3 vordefinierten Variablen machen Perl-Scripts langsamer. Nur verwenden, wenn nicht anders möglich.
$MATCH = $& Der letzte erfolgreiche match-String
$PREMATCH = $` Der String vor dem letzten erfolgreichen match
$POSTMATCH = $' Der String nach dem letzten erfolgreichen match
Beispiel: Perl-Script
$t='Das ist ein RE-Test';
$t =~ m/(ist).*(RE)/;
Ergebnisse:
$1 = 'ist',   $2 = 'RE',
$+ = 'RE',    $& = 'ist ein RE'
$` = 'Das ',  $' = '-Test'
Besonders praktisch ist die Möglichkeit, Variable als RE-Argumente einzusetzen:
Beispiel
$rex = 'suche';
$test =~ m/$rex/;
So können 'programmierbare RegExp' eingesetzt werden. Lediglich der nachgestellte Operator (g,i,..) muss explizit eingesetzt werden und kann nicht durch eine Variable vertreten werden.
Beispiel
@xa=('htm','php');
$m=0;
foreach $x (@xa){
if($test=~m/$x/) {
$m++;
}
}
Hier sind einige RexExp-Ausdrücke im Array @xa enthalten. Sie werden der Reihe nach auf den String $test angewendet. Bei jedem Treffer wird der Zähler $m erhöht.
Beachten sie die Maskierungs-Regeln: Ein Punkt wird z.B. in einer RegExp mit \. maskiert. Das Zeichen \ muss jedoch selbst maskiert werden, daher muss eine Variable $rex="\\."; lauten, um die gleiche Wirkung zu erzielen.
Perl-Module:
Eine große Zahl zusätzlicher Module bietet die Möglichkeit, die ohnehin vorbildliche Funktionalität von Perl noch zu erweitern.
Allein das Stichwort regex liefert ca. 60 Module, jedes davon mit mehreren Funktionen. Darüber hinaus sind Module für spezielle Anwendungs-Gebiete verfügbar.
RegExp-Links WebLinks zu diesem Thema:
SelfHTML (de), PerlDoc, Zvon, Univ.of Georgia, ITCP Triest: Perl search & replace functions

Regular Expressions in Javascript

Javascript macht RE für Webseiten verfügbar. Viele Seiten dieses Webs, darunter die Live-RE-Seite verwenden RE mit Javascript.
FunktionSyntaxBeispiel
Definition
x = /RE/;
oder
re = "RE";
y = new RegExp(re,flg);
Einer Variablen lässt sich direkt eine RE zuteilen:
var rex = /ab\d.+/;
So setzen sie ein RegExp-Objekt aus einem RE-string (ohne die begrenzenden //) und (optional) einem String für die nachfolgenden Operatoren (flags) zusammen:
Die beiden Strings können aus Variablen stammen oder in "" direkt eingegeben werden.
rey = new RegExp("ab\d.+");
rez = new RegExp(rey,"gi");
match res = str.match(/RE/flg); str ist eine string-Variable, /RE/die Regular Expression, flg (string) die optionalen nachfolgenden Operatoren (flags).
Das Ergebnis res kann mehrfach ausgewertet werden:
if (res) {...} // logische Verzweigung nach "match" bzw. "kein match"
n = res.length; // Anzahl der match-Treffer (Zahl)
ei = res[i]; // das i-te Treffer-Ergebnis (string)
replace res = str.replace(/RE/flg,by); str und by sind String-Variable. In String str wird nach Regel RE der String by ersetzt.
str = "Maier";
res = str.replace(/ai/,"ey");
Um alle Treffer zu ersetzen, setzen sie die global-flag: Aus diesem ISO-Datum werden alle Trennzeichen entfernt, nur die Ziffern bleiben übrig.
str = "2001-02-03 12:34:56";
res = str.replace(/[-: ]/g,"");
search pos1 = str.search(/RE/flg); Liefert die Position des ersten match oder -1 ohne Treffer.
store res = str.match(/(RE)/); Ausdrücke in () werden gespeichert und sind in RegExp.$1,RegExp.$2,.. verfügbar.
Beispiel:   Isolierung von Jahr, Monat und Tag aus einem ISO-Datum:
id = "2004-03-21";
res = id.match(/(\d+)-(\d+)-(\d+)/);
yy=RegExp.$1; mm=RegExp.$2; dd=RegExp.$3;
Beispiel:   Isolierung des Dateinamens aus einem Pfad:
mypath = document.location.href;
mypath.match(/([^\/]*)$/);
myname = RegExp.$1;
execute re = /RE/;
res = re.exec(str);
Ausführung einer RegExp, Regel re, am string str. Das Ergebnis kann wie bei match weiter verarbeitet werden. Eine Methode des RegExp-Objekts (s.u.)
test res = re.test(str); Ausführung wie bei exec, das Ergebnis ist entweder true oder false, je nachdem ob match-Treffer erzielt wurden oder nicht. Eine Methode des RegExp-Objekts (s.u.)
split str = "Am dam des";
ra = str.split(/\s/g)
Aufspaltung nach der RE-Regel. Das Ergebnis ra enthält ein → Array mit den einzelnen Ergebnissen, hier ra["Am","dam","des"]
RegExp
(object)
Syntax: RegExp.property
$1 .. $9
$ oder input
$* oder multiline
$& oder lastMatch
$+ oder lastParen
$` oder leftContext
$' oder rightContext
lastIndex
global
ignoreCase
multiline
source
Eigenschaften (properties) des RegExp-Objekts:
$1..$9: gespeicherte Strings (z.B. var i = RegExp.$1; )
Eingabe-String  
match über Zeilengrenzen hinweg (true oder false)  
der letzte gefundene match-String  
der letzte gespeicherte String  
Substring bis zum letzten match-Zeichen  
Substring ab dem letzten match-Zeichen  
Position des ersten Zeichens nach match-Abbruch  
true, wenn der match mit global-flag erfolgte  
true, wenn der match mit ignorecase-flag erfolgte.  
true, wenn der match mit multiline-flag erfolgte.  
Quelltext der verwendeten RE.  
RegExp
(object)
Syntax: RegExp.method
compile(pattern[, flags])
exec
test
toSource
toString
Methoden (methods) des RegExp-Objekts:
compiliert ein RE-Objekt aus einem RE-String und einem flag-String
führt einen RE-match aus und gibt ein result-Array zurück.
führt einen RE-match aus und gibt true (match) oder false (no match) zurück
gibt den Quelltext eines RE-Objekts zurück
gibt einen String des RE-Objekts zurück
Flags
(flg)
g → global
i → ignoreCase
m → multiline
Javascript unterstützt diese 3 Flags, die auch miteinander kombiniert werden können (z.B. zu gi ).

Verwendung von   eval

Reguläre Ausdrücke lassen sich ebenso wie jede andere Javascript-Befehlszeile in einem String programmieren und mit Funktion eval ausführen.

Das ist jedoch normalerweise nicht notwendig, da sich Javascript Reguläre Ausdrücke auch anders aus Variablen zusammenstellen lassen (siehe ↑ oben).
RegExp-Links Links zu diesem Thema:
SelfHTML (de - RegExp, strings), WebReference, JavaScriptKit, Visibone, John Robert Morris,
Furtivecode (Live Online RE), DevGuru, Regular-Expressions.info,

Regular Expressions in Java

Seit → Java 2 / 1.4 werden RE von Sun-Standard-Java unterstützt.
RegExp-Links Links zu diesem Thema:
Sun ( AbstractFormatter, java.util.regex package, Tutorial, RE-Treffer), Rex (crocodile), Apache Jakarta, ...

Regular Expressions in PHP

Mit → PHP Version 5.3 wurde die längst fällige Umstellung der RegExp-Funktionen auf die übliche Standard-Syntax durchgeführt. Für die Verwendung Regulärer Ausdrücke stehen folgende Funktionen zur Verfügung:
preg_grep, preg_match, preg_match_all, preg_quote, preg_replace, preg_replace_callback, preg_split

Neue PHP-Versionen >=5.3

Alle preg_* Funktionen sind im Modul standard verfügbar.
Es ist nicht notwendig, für RegExp irgendein Modul zu laden.
Das ehemalige Modul pcre ist aufgelassen, seine Funktionen in standard integriert.

Alte PHP-Versionen <5.3

Das Modul pcre (Perl compatible Regular Expressions) muss ausdrücklich installiert und geladen werden.
Im Modul standard befinden sich noch die jetzt ausgelaufenen ereg_* Funktionen.
Diese sollten jedoch umgehend gegen die preg_* -Funktionen ausgetauscht werden.
Die auslaufenden ereg_* Funktionen werden in diesem Kapitel vorläufig noch angeführt, sollten jedoch ersetzt werden:
ereg, eregi, ereg_replace, eregi_replace, split

Null-Bytes

PHP akzeptiert die Bezeichnung von Null-Bytes in RegExp nur in dieser Form: \x{0}

BackSlash

Bezeichnen sie \ Baskslash in PHP-RegExp in dieser Form: \x{5C}
Auch verwendbar, aber unklar: \\x5C \\\
Funktion SyntaxBeispiel
match $res = preg_match("/RE/",$str);

$res = ereg("RE",$str);
$res = eregi("RE",$str);
Für das Ergebnis 1 genügt ein einziger Treffer, ansonsten wird 0 zurückgegeben.
So kann man z.B. die Umgebungs-Variable PATH testen:
$str = getenv('PATH');
if(preg_match("/windows/i",$str) {...} else {...}
Auf einem M$-System enthält der PATH stets den String Windows oder WINDOWS . Für den match wird daher das i-flag (case-independent) verwendet.
$im = preg_match_all("/RE/",$str,$ares); Die Funktion durchsucht den gesamten String $str nach Treffern und gibt deren Anzahl $im zurück. Jeder Treffer wird in das → Array $ares eingetragen.
$res = strstr($str,$ndl);
$res = stristr($str,$ndl);
Wenn nur das Vorkommen eines Teil-Strings $ndl (die Nadel im Heuhaufen) geprüft werden soll, dann arbeiten diese beiden Funktionen rascher als RegExp ( stristr ist die case-independent Version).
replace $res = preg_replace("/RE/",$by,$str);

$res = ereg_replace("RE",$by,$str);
$res = eregi_replace("RE",$by,$str);
Diese Funktionen verarbeiten jeden Treffer im gesamten String.
So wird Meier in Meyer umbenannt, und Zweierlei in Zweyerley.
$str = 'Meier';
$res = preg_replace("/ei/",'ey',$str);
$res = preg_replace("/RE/",$by,$str,$lim); Die Anzahl der Treffer kann mit dem optionalen Argument $lim begrenzt werden. Mit $lim=1 wird nur der erste Treffer ersetzt.
So wird Zweierlei in Zweyerlei geändert:
$str = 'Zweierlei';
$res = preg_replace("/ei/",'ey',$str,1);
store
preg_match("/RE/",$str,$regs);

ereg("(RE)",$str,$regs);
eregi("(RE)",$str,$regs);
Das 3. Argument $regs gibt das Ergebnis-Array an.
So kann man eine Adresse in Staat, Postleitzahl und Ort trennen:
$str = 'DL-1234 Entenhausen';
preg_match("/([A-Z]*)[^0-9]*([0-9]+)[ \t]+(.*)/",$str,$regs);
Das ergibt:
$regs[1]='DL';
$regs[2]='1234';
$regs[3]='Entenhausen';
split
$ares = preg_split("/RE/",$str);

$ares = split("RE",$str);
$ares = spliti("RE",$str);
Ein optionales 3.Argument begrenzt die Anzahl der Ergebnis-Elemente.
Zerlegt einen String nach der durch RE definierten Regel und gibt ein → Array der Bestandteile zurück.
$v = phpversion();
$va = preg_split("/\./",$v,2);
Das ergibt z.B. für Version 5.3.0:
$va[0]=5;  $va[1]=3;
Der String würde noch ein 3. Element $va[2]=0; liefern, dieses wird jedoch wegen der Begrenzung auf 2 Elemente ignoriert.
RegExp-Links Links zu diesem Thema:
SelfPHP (de, Reguläre Ausdrücke Posix und Reguläre Ausdrücke)
infos24 (de), WebReference, PHPfreaks,

Regular Expressions in Python

Import des re-Moduls
import re
Compilieren einer RE
p = re.compile('test[0-9A-F]+')
Anwendung einer compilierten RE: match gibt bei Erfolg ein MatchObject zurück, das weiter verwendet werden kann. Ohne match wird None zurückgegeben.
m = p.match('test0A')
print m
Auskunft vom MatchObject:
group() ergibt den match-string, start() die Anfangsposition, end() die Endposition, span() ein Zahlenpaar beider Positionen.
if m:
print 'match: '
print 'group = ', m.group()
print 'start = ', m.start()
print 'end = ', m.end()
print 'span = ', m.span()
else:
print 'no match'

print re.match('<.*>','<html>xyz</html>').group()
findall() gibt eine Liste aller match-strings zurück, hier die 3 Zahlen-strings 12, 34, 46.
m = re.compile('\d+')
m.findall('12 und 34 ergibt 46')
RegExp-Links Original-Doku zu RE von python.org
Eine ausgezeichnete Webseite zum Thema Python & RE bietet A.M. Kuchling

Regular Expressions in SQL

Je nach DB-Server wird RegExp-Suche in Texten angeboten. MySQL unterstützt RegExp mit dem Operator regexp
Das Beispiel findet die Zunamen Maier, Mair, Mayer und Mayr, jedoch nicht Mayereder oder Maler in der Tabelle personen.
Achtung: In älteren Versionen von MySQL unterscheidet regexp streng zwischen großen und kleinen Buchstaben (case-sensitive), in neueren nicht mehr.
select * from personen where zuname regexp 'Ma[iy]+r';
RegExp-Links Original-Doku von MySQL

Regular Expressions in VBA

Der IT-Marktführer hat jahrelang versucht, Reguläre Ausdrücke einfach zu ignorieren. Da aber weltweit fast jede Software zur Verarbeitung von Strings oder Texten nur mehr RE verwendet, hat man sich spät zu einer halbherzigen Lösung entschlossen.
Visual Basic als Standalone-Programmiersprache (nur für Win-Systeme) kennt ab Version 6 ein RegExp-Objekt.
Leider habe ich noch keine → VBA-Version (für Word oder Excel) mit RE-Unterstützung gesehen. Deshalb verweise ich vorläufig auf einen Artikel im M$-Support.
RegExp-Links M$-Support: How To Use Regular Expressions in Microsoft Visual Basic 6.0
Regular-Expressions.info: Using Regular Expressions with .NET

Regular Expressions in Programmen

Auf → Linux bieten viele Programme erstklassige RE-Unterstützung.

Perl ist Standard-Bestandteil aller gängigen Linux-Distributionen.
Windows kennt keine RE.

→ Perl installieren ! - Bietet RE in der Original-Version.
Mit Perl-Scripts *.pl kann man dann genauso arbeiten wie mit → Konsolen-Scripts ( *.bat oder *.cmd ), jedoch wesentlich mächtiger - und natürlich auch mit RE !

→ Cygwin installieren ! - Bietet RE in vielen portierten Dienstprogrammen.
Shell-Konsolen:
Fast jedes Linux-Konsolen-Programm unterstützt RegExp.
Text-Editoren und -Prozessoren:
Fast alle Linux-Editoren unterstützen RegExp:
BBEdit, Emacs, Nisus Writer, vi , ...
System-Administration:
Programme wie grep ('global regular expression print' ) oder sed (stream editor = pipeline filter) eignen sich besonders für die automatisierte Textverarbeitung, wobei typische "Texte" sowohl die Namen von Dateien und Verzeichnissen als auch deren Inhalte sind.
Mit → Cygwin ist grep auch auf Windows-PC verfügbar !

Link: RegExp Links University of Virginia, Stephen Ramsay
Beispiel für grep-Syntax:
# grep "RE" infile >outfile
Hier wird die RE auf den gesamten Inhalt von Datei infile angewendet, das Ergebnis in Datei outfile gespeichert.
(Auch die RegExp kann in einer Datei enthalten sein.)
Achtung: man uallesen, grep verwendet eine etwas abweichende RegExp-Syntax !