Я багато цього досліджував, але все ще не зрозумів. Що означає межа слова ? Що це робить?
Так, наприклад, хтось міг би мені пояснити цю команду?
egrep '\b[A-Z]+\b' filename.sh
Я багато цього досліджував, але все ще не зрозумів. Що означає межа слова ? Що це робить?
Так, наприклад, хтось міг би мені пояснити цю команду?
egrep '\b[A-Z]+\b' filename.sh
Відповіді:
Як описано тут , наприклад, воно співпадає між словами:
Є три різні позиції, які можна визначити як межі слів:
- Перед першим символом у рядку, якщо перший символ є символом слова.
- Після останнього символу в рядку, якщо останній символ є символом слова.
- Між двома символами в рядку, де один є символом слова, а другий - символом слова.
Ось приклади кожного з цих випадків:
Для рядка 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)
, можливо, дументації щодо регулярних виразів у використанні.