Antworten:
Wie beschrieben hier zum Beispiel paßt es zwischen Worten:
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
stimmt der erste Fall überein
foobar
^-----here
Für die Zeichenfolge foobar
stimmt der zweite Fall überein
foobar
^--here
Für die Zeichenfolge stimmt foo bar
der dritte Fall überein
foo bar
^--here, because space is not a word character
Was als Wortzeichen qualifiziert ist, hängt von der spezifischen Implementierung des regulären Ausdrucks ab. In allen Fällen werden jedoch Buchstaben ( [a-z]
und [A-Z]
), Zahlen ( [0-9]
) und _
als Wortzeichen betrachtet.
In dem von Ihnen geposteten Beispiel-Regex ( \b[A-Z]+\b
) wird also die längste Zeichenfolge gefunden, die sich zwischen zwei Wortgrenzen befindet und nur aus Großbuchstaben besteht. Es könnte einfacher sein, dies 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
egrep
(noch /usr/xpg4/bin/egrep
) nicht so behandelt \b
. Zum Beispiel echo "FOOBAR" | egrep '\b[A-Z]+\b'
würde nicht passen.
egrep '\b[A-Z]+\b' filename.sh
Brechen wir es auf:
[A-Z]
Stellt ein beliebiges Zeichen in der Zeichenklasse dar
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
.[A-Z]+
repräsentiert ein oder mehrere Vorkommen von Großbuchstaben. Beispiel Streichhölzer wären: A
, HELLO
, IS
, I
, ELEPHANT
, usw.'\bINDIA\b'
: ist genau wie ein GANZES WORT, bei dem nach dem Wort INDIA
in Großbuchstaben gesucht wird. Es würde NICHT passen INDIANA
. Wenn Sie also dasselbe Prinzip anwenden, werden '\b[A-Z]+\b'
ganze Wörter mit einem oder mehreren Großbuchstaben gesucht.egrep '\b[A-Z]+\b' filename.sh
würde nach Wörtern mit einem oder mehreren Buchstaben in Großbuchstaben in der Datei gesucht - filename.sh
.\b
- ist genau wie eine ganze Wortsuche.
[azA-Z0-9_]
. Überprüfen Sie das Handbuch aufegrep(1)
möglicherweise die Dokumentation der verwendeten regulären Ausdrücke.