Смутно о границе слова

Я много разбираюсь в этом, но я до сих пор не понимаю. Что означает граница слов ? Что оно делает?

Так, например, может кто-нибудь объяснить эту команду мне, пожалуйста?

egrep '\b[AZ]+\b' filename.sh 

Как описано здесь , например, оно совпадает между словами:

Существуют три разных позиции, которые квалифицируются как границы слов:

  1. Перед первым символом в строке, если первый символ является символом слова.
  2. После последнего символа в строке, если последний символ является символом слова.
  3. Между двумя символами в строке, где один является символом слова, а другой не является символом слова.

Вот примеры каждого из этих случаев:

  1. Для строки foobar первый случай соответствует

      foobar ^-----here 
  2. Для строки foobar второй случай соответствует

     foobar ^--here 
  3. Для строки foo bar третий случай будет соответствовать

     foo bar ^--here, because space is not a word character 

То, что квалифицируется как символ слова, зависит от конкретной реализации регулярного выражения. Однако во всех случаях буквы ( [az] и [AZ] ), числа ( [0-9] ) и _ считаются символами слов.


Итак, пример regex, который вы разместили ( \b[AZ]+\b ), означает поиск самой длинной строки, которая находится между двумя границами слов и состоит только из букв верхнего регистра. Это может быть проще объяснить на примере:

 echo "FOOBAR" | egrep '\b[AZ]+\b' # Works echo "FOO BAR" | egrep '\b[AZ]+\b' # Works echo "aFOOBARb" | egrep '\b[AZ]+\b' # Does not work, we want capitals only echo "12345" | egrep '\b[A-Za]+\b' # Does not work, no letters echo "1FOOBAR2" | egrep '\b[AZ]+\b' # Does not work, 1 and 2 are word chars echo "_FOOBAR_" | egrep '\b[AZ]+\b' # Does not work, _ is a word char echo "#FOOBAR$" | egrep '\b[AZ]+\b' # Works, # and $ are not word chars