Ich habe viel darüber recherchiert, bin mir aber immer noch nicht sicher. Was bedeutet Wortgrenze gemein? Was macht es?
Könnte mir zum Beispiel bitte jemand diesen Befehl erklären?
egrep 'b[A-Z]+b' filename.sh
Akzeptierte Antwort:
Wie hier beschrieben, stimmt es zum Beispiel mit zwischen überein Wörter:
Es gibt drei verschiedene Positionen, die als Wortgrenzen gelten:
- Vor dem ersten Zeichen in der Zeichenfolge, wenn das erste Zeichen ein Wortzeichen ist.
- Nach dem letzten Zeichen in der Zeichenfolge, wenn das letzte Zeichen ein Wortzeichen ist.
- Zwischen zwei Zeichen in der Zeichenfolge, wobei eines ein Wortzeichen und das andere kein Wortzeichen ist.
Hier sind Beispiele für jeden dieser Fälle:
-
Für die Zeichenfolge
foobar
, der erste Fall stimmt übereinfoobar ^-----here
-
Für die Zeichenfolge
foobar
, der zweite Fall passtfoobar ^--here
-
Für die Zeichenfolge
foo bar
, der dritte Fall wird übereinstimmenfoo bar ^--here, because space is not a word character
Was als Wortzeichen qualifiziert wird, hängt von der spezifischen Implementierung des regulären Ausdrucks ab. Buchstaben ([a-z]
und [A-Z]
), Zahlen ([0-9]
) und _
gelten als Wortzeichen.
Die von Ihnen gepostete Beispiel-Regex (b[A-Z]+b
) bedeutet, die längste Zeichenfolge zu finden, die zwischen zwei Wortgrenzen liegt und nur aus Großbuchstaben besteht. Es könnte einfacher sein, es anhand eines Beispiels zu erklären:
echo "FOOBAR" | egrep 'b[A-Z]+b' # Works
echo "FOO BAR" | egrep 'b[A-Z]+b' # Works
echo "aFOOBARb" | egrep 'b[A-Z]+b' # Does not work, we want capitals only
echo "12345" | egrep 'b[A-Za]+b' # Does not work, no letters
echo "1FOOBAR2" | egrep 'b[A-Z]+b' # Does not work, 1 and 2 are word chars
echo "_FOOBAR_" | egrep 'b[A-Z]+b' # Does not work, _ is a word char
echo "#FOOBAR$" | egrep 'b[A-Z]+b' # Works, # and $ are not word chars