Re: [gnu sed] Inkonsistentes(?) escapen



begin followup to Martin Ammermüller:
> Welches Zeichen wann wie oft bei sed regex Mustern escaped werden
> muss um den gewünschten Effekt zu haben ist mir irgendwie schleierhaft.
> Das krieg' ich meist nur durch probieren hin.

In einer GNU-Umgebung sieht das so aus:

man 7 regex
# Regular expressions (''RE''s), as defined in POSIX 1003.2, come in two
# forms: modern REs (roughly those of egrep; 1003.2 calls these
# ''extended'' REs) and obsolete REs (roughly those of ed(1); 1003.2
# ''basic'' REs).

man sed
# POSIX.2 BREs should be supported,

man grep
# -E, --extended-regexp
# Interpret PATTERN as an extended regular expression (see below).

Das Kommando "egrep" entspricht "grep -E".

Und dann gibt es da noch was:

man perlre
# perlre - Perl regular expressions

Egal.

Die GNU-Implementierung von BRE kennt auch alle Elemente von ERE,
nur werden sie mit Rückwärtsschrägstrich geschrieben. Bei anderen
Implementierungen von BRE fehlen diese Elemente u. U. einfach.

> [...]
> sed -e 's/^Priority:.*\|^Section:.*//g' datei
>
> funktioniert einwandfrei (bis auf das leider nicht gematchte newline).

Dann nimm halt 'd' statt 's'.

sed -e '/^\(Priority\|Section\):/d' datei

> [...]
> Warum dürfen weder "^", "." noch "*" escaped werden,

Die gibt es bereits in den BRE.

> während "|" und "+" escaped werden müssen?

Das sind Elemente der ERE, die in der GNU-Implementierung der BRE mit
Rückwärtsschrägstrich verfügbar sind.

--
Es gibt keine Tyrannei im Zustand der Verwirrung.
.



Relevant Pages