Я багато цього досліджував, але все ще не зрозумів. Що означає межа слова ? Що це робить?
Так, наприклад, хтось міг би мені пояснити цю команду?
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), можливо, дументації щодо регулярних виразів у використанні.