Ответы:
Как описано здесь , например, это соответствует между словами:
Есть три разных положения, которые квалифицируются как границы слов:
- Перед первым символом в строке, если первый символ является символом слова.
- После последнего символа в строке, если последний символ является символом слова.
- Между двумя символами в строке, где один является символом слова, а другой не является символом слова.
Вот примеры каждого из этих случаев:
Для строки foobar
первый случай соответствует
foobar
^-----here
Для строки foobar
второй случай соответствует
foobar
^--here
Для строки foo bar
третий случай будет соответствовать
foo bar
^--here, because space is not a word character
То, что считается символом слова, зависит от конкретной реализации регулярного выражения. Однако во всех случаях буквы ( [a-z]
и [A-Z]
), цифры ( [0-9]
) и _
считаются символами слова.
Итак, пример регулярного выражения, который вы разместили ( \b[A-Z]+\b
), означает, что вы найдете самую длинную строку, которая находится между двумя границами слова и состоит только из заглавных букв. Это может быть проще объяснить на примере:
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
(ни /usr/xpg4/bin/egrep
) не относится к \b
этому способу. Например, echo "FOOBAR" | egrep '\b[A-Z]+\b'
не будет соответствовать.
egrep '\b[A-Z]+\b' filename.sh
Давайте разберемся:
[A-Z]
представляет любой символ в классе символов
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
.[A-Z]+
представляет одно или несколько вхождений символов верхнего регистра. Пример матчи будут: A
, HELLO
, IS
, I
, ELEPHANT
и т.д.'\bINDIA\b'
: точно так же, как поиск по всему слову INDIA
в верхнем регистре. Было бы НЕ совпадать INDIANA
. Таким образом, применяя тот же принцип - '\b[A-Z]+\b'
будет искать целые слова, имеющие одну или несколько букв в верхнем регистре.egrep '\b[A-Z]+\b' filename.sh
будет искать слова, имеющие одну или несколько букв в верхнем регистре в файле - filename.sh
.\b
- точно так же, как поиск по всему слову.
[azA-Z0-9_]
. Посмотрите в руководствеegrep(1)
, возможно, пояснение к используемым регулярным выражениям.