AW: Grep "Formel"
Räusper. Grep ist schon ein richtiges „Schweizer Taschenmesser“. Der Einstieg ist
nicht einfach. Und das Verstehen auch nicht wirklich.
Ich werde jetzt nicht mosern, sondern einfach nur versuchen, diese recht einfache Suche
etwas ausführlicher zu erklären. Vielleicht hilft das dem Einen oder Anderen ein bisschen, dieses recht abstrakte Thema etwas besser zu verstehen.
… "$2", also die zweite Klammer, wird somit ignoriert.
Fast richtig.
$2 wir nur deswegen ignoriert, weil du das Ergebnis von Fundstelle zwei
nicht im Ersetzenfeld eingesetzt hast. Das Ergebnis wurde aber auf jeden Fall in $2 gespeichert.
Es ist nicht wirklich nötig, überhaupt $2 zu verwenden (es ist allerdings auch nicht falsch :lol
(\d+)(d)
Du suchst nach
einer oder
mehreren Ziffern, (die erste
Fundstelle speicherst
du in
$1) mit nachfolgendem
d, (die „zweite“
Fundstelle speicherst
du in
$2)
Das Speichern in $2 ist deshalb nicht notwendig, weil die zweite Fundstelle beim Ersetzen überhaupt nicht benötigt wird. Du könntest auch problemlos nach:
(\d+)d
suchen. Im Gegensatz zu dem ersten Grep wird hier die zweite Fundstelle (der Buchstabe
d) gar nicht erst gespeichert. In diesem Fall wird sie tatsächlich „nur“ gefunden und „ignoriert“.
Wobei – ignoriert wird sie nicht wirklich. Denn sie wird ja durch den Ersetzen-Ausdruck ersetzt.
Aber
eigentlich willst du ja auch nicht erst ein
d mit einer oder mehrere vorangestellten Ziffern
finden und diese Ziffern in $1
speichern, nur
um diese dann gleich anschliessend durch sich selbst und den Zusatz
(Leerzeichen)Tag zu ersetzen.
Dafür (und die Auswirkungen merkt man in großen Dokumenten und bei aufwändigeren Grep-Suchen&Ersetzen auf jeden Fall) gibt es ein paar nette Helferlein. Du suchst ja eigentlich nach einem
d, das direkt nach einer Ziffer vorkommt.
Im Deutschen
blickst du von deinem
d zurück auf die
vorhandene Ziffer
Im (D)englischen ist das ein
positiver Lookbehind -->
(?<=)
(?<=
\d)
d
Dieser positive Lookbehind findet ein
d nur dann, wenn vor diesem eine Ziffer vorhanden ist. Es muss
kein Suchergebnis gespeichert werden, und auch das gefundene
d wird „
ignoriert“ und durch den Ersetzenausdruck
(Leerzeichen)Tag ersetzt.
Es gibt noch ein paar Möglichkeiten mehr, diese scheint mir persönlich die effektivste und ressourcenschonenste zu sein, auch wenn man sich bei einer kleinen Tabelle darüber überhaupt keine Gedanken machen muss. Solche Gedankengänge sind aber extrem wichtig für das
Grundverständnis von
Grep und erst recht wichtig für die Erstellung von
eigenen Grep-Suchen.
Viel Spass und ein fröhliches greppen.
:lol: