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 \bquesto 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 INDIAin 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.shcercherebbe 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.