Risposte:
Come descritto qui , ad esempio, corrisponde tra le parole:
Esistono tre diverse posizioni che si qualificano come limiti di parole:
- Prima del primo carattere nella stringa, se il primo carattere è un carattere parola.
- Dopo l'ultimo carattere nella stringa, se l'ultimo carattere è un carattere parola.
- Tra due caratteri nella stringa, dove uno è un carattere di parola e l'altro non è un carattere di parola.
Ecco alcuni esempi di ciascuno di questi casi:
Per la stringa foobar
, il primo caso corrisponde
foobar
^-----here
Per la stringa foobar
, il secondo caso corrisponde
foobar
^--here
Per la stringa foo bar
, il terzo caso corrisponderà
foo bar
^--here, because space is not a word character
Ciò che si qualifica come carattere parola dipende dall'implementazione specifica dell'espressione regolare. In tutti i casi, tuttavia, le lettere ( [a-z]
e [A-Z]
), i numeri ( [0-9]
) e _
sono considerati caratteri di parole.
Quindi, l'esempio regex che hai pubblicato ( \b[A-Z]+\b
) significa trovare la stringa più lunga che si trova tra due limiti di parole e che consiste solo di lettere maiuscole. Potrebbe essere più facile da spiegare con l'esempio:
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
(né /usr/xpg4/bin/egrep
) non tratta in \b
questo modo. Ad esempio, echo "FOOBAR" | egrep '\b[A-Z]+\b'
non corrisponderebbe.
egrep '\b[A-Z]+\b' filename.sh
Dividiamolo:
[A-Z]
rappresenta qualsiasi personaggio nella classe di caratteri
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
.[A-Z]+
rappresenta una o più occorrenze di caratteri maiuscoli. Partite esempio potrebbe essere: A
, HELLO
, IS
, I
, ELEPHANT
, etc.'\bINDIA\b'
: è esattamente come una ricerca IN TUTTA PAROLA per la parola INDIA
in maiuscolo. Sarebbe NON corrispondere INDIANA
. Applicando così lo stesso principio, '\b[A-Z]+\b'
cercherebbero parole intere con una o più lettere maiuscole.egrep '\b[A-Z]+\b' filename.sh
cercherebbe le parole con una o più lettere tutte in maiuscolo nel file - filename.sh
.\b
- è esattamente come una ricerca di parole intere.
[azA-Z0-9_]
. Controlla il manuale peregrep(1)
, forse la documentazione per le espressioni regolari in uso.