Регулярні вирази та символи підстановки¶
В операційній системі GNU/Linux регулярні вирази та символи підстановки часто мають однаковий символ (або стиль), тому люди часто їх плутають.
Яка різниця між регулярними виразами та символами підстановки?
Подібності:
- Вони мають однаковий символ, але представляють абсолютно різні значення.
Відмінності:
- Регулярні вирази відповідають вмісту файлу; Символи підстановки зазвичай використовуються для відповідності імен файлів або каталогів.
- Регулярні вирази зазвичай використовуються в таких командах, як
grep
,sed
,awk
тощо. - Символи підстановки зазвичай використовуються з такими командами, як
cp
,find
,mv
,touch
,ls
тощо.
Символи підстановки в GNU/Linux¶
ОС GNU/Linux підтримує такі символи підстановки:
стиль символів підстановки | роль |
---|---|
? | Відповідає одному символу імені файлу або каталогу. |
- | Відповідає 0 або більше довільним символам імені файлу чи каталогу. |
[ ] | Збігається з будь-яким символом у круглих дужках. Наприклад, [один] що означає відповідність o, n або e. |
[-] | Збігається з будь-яким символом у вказаному діапазоні в дужках. Наприклад, [0-9] відповідає будь-якому окремому числу від 0 до 9. |
[^] | «логічне невідповідність» одного символу. Наприклад, [^a-zA-Z] представляє відповідність одному нелітерному символу. |
{,} | Неперервний збіг кількох окремих символів. Виділяється комами. |
{..} | Те саме, що [-]. Наприклад, {0..9} і {a..z} |
Різні команди мають різну підтримку стилів підстановки:
find
: Підтримує *, ?, [ ], [-], [^]ls
: усі підтримуютьсяmkdir
: Підтримує {,} and {..}touch
: Підтримує {,} and {..}mv
: Всі підтримуютьсяcp
: Всі підтримуються
Наприклад:
Shell > mkdir -p /root/dir{1..3}
Shell > cd /root/dir1/
Shell > touch file{1,5,9}
Shell > cd
Shell > mv /root/dir1/file[1-9] /root/dir2/
Shell > cp /root/dir2/file{1..9} /root/dir3/
Shell > find / -iname "dir[1-9]" -a -type d
Регулярні вирази в GNU/Linux¶
Завдяки історичному розвитку існують дві основні школи регулярних виразів:
- POSIX:
- BRE(basic regular express)
- ERE(extend regular express)
- Клас символів POSIX
- PCRE (Regular Expressions, сумісні з Perl): найпоширеніша серед різних мов програмування.
BRE | ERE | Клас символів POSIX | PCRE | |
---|---|---|---|---|
grep |
√ | √ (Потрібна опція -E) |
√ | √ (Потрібна опція -P) |
sed |
√ | √ (Потрібна опція -r) |
√ | × |
awk |
√ | √ | √ | × |
Щоб дізнатися більше про регулярні вирази, відвідайте цей веб-сайт, щоб отримати більше корисної інформації.
BRE¶
BRE (базовий регулярний вираз) — це найстаріший тип регулярного виразу, введений командою grep
в системах UNIX і текстовому редакторі ed.
метасимвол | опис | приклад bash |
---|---|---|
- | Відповідає кількості повторень попереднього символу, яка може бути 0 або будь-якою кількістю разів. | |
. | Відповідає будь-якому окремому символу, за винятком розривів рядків. | |
^ | Відповідає початку рядка. Наприклад, ^h відповідатиме рядкам, які починаються з h. | |
$ | Збігається з кінцем рядка. Наприклад, h$ відповідатиме рядкам, які закінчуються на h. | |
[] | Збігається з будь-яким символом, указаним у дужках. Наприклад - [who] відповідатиме w, h або o; [0-9] відповідатиме одній цифрі; [0-9][a-z] відповідатиме символам, які складаються з однієї цифри та однієї малої літери. | |
[^] | Відповідає будь-якому окремому символу, крім символів у дужках. Наприклад, [^0-9] відповідатиме будь-якому нечисловому символу. [^a-z] відповідатиме будь-якому символу, який не є малою літерою. | |
\ | Екранний символ скасовує значення, представлене деякими спеціальними символами. | echo -e "1.2\n122" \\| grep -E '1\.2' 1.2 |
\{n\} | Збігається з кількістю входжень попереднього одного символу, а n представляє кількість збігів. | echo -e "1994\n2000\n2222" \\| grep "[24]\{4\}" 2222 |
\{n,\} | Збігається з попереднім єдиним символом принаймні n разів. | echo -e "1994\n2000\n2222" \\| grep "[29]\{2,\}" 1994 2222 |
\{n,m\} | Збігається з попереднім єдиним символом принаймні n і не більше m разів. | echo -e "abcd\n20\n300\n4444" \\| grep "[0-9]\{2,4\}" 20 300 4444 |
ERE¶
метасимвол | опис | приклад bash |
---|---|---|
- | Відповідає кількості входжень попереднього одного символу, який може бути один або кілька разів. | echo -e "abcd\nab\nabb\ncdd" \\| grep -E "ab+" abcd ab abb |
? | Збігається з кількістю входжень попереднього одного символу, який може бути 0 або 1. | echo -e "ac\nabc\nadd" \\| grep -E 'a?c' ac abc |
\< | Граничний символ, який відповідає початку рядка. | echo -e "1\n12\n123\n1234" \\| grep -E "\<123" 123 1234 |
\> | Граничний символ, що відповідає кінцю рядка. | echo -e "export\nimport\nout" \\| grep -E "port\>" export import |
() | Комбінаторне зіставлення, тобто рядок у дужках як комбінація, а потім зіставлення. | echo -e "123abc\nabc123\na1b2c3" \\| grep -E "([a-z][0-9])+" abc123 a1b2c3 |
\ | Символ крнвеєру представляє значення "або". |
ERE також підтримує символи зі спеціальними значеннями:
спеціальні символи | опис |
---|---|
\w | Еквівалент [a-zA-Z0-9] |
\W | Еквівалент [^a-zA-Z0-9] |
\d | Еквівалент [0-9] |
\D | Еквівалент [^0-9] |
\b | Еквівалент \< або \> |
\B | Відповідає символу без меж. |
\s | Відповідає будь-якому пробілу. Еквівалент [ \f\n\r\t\v] |
\S | Еквівалент [^ \f\n\r\t\v] |
порожній символ | опис |
---|---|
\f | Відповідає одному символу каналу. Еквівалент \x0c і \cL |
\n | Збігається з окремими розривами рядків. Еквівалент \x0a і \cJ |
\r | Збігається з одним поверненням каретки. Еквівалент \x0d і \cM |
\t | Відповідає одній вкладці. Еквівалент \x09 і \cI |
\v | Відповідає одній вертикальній вкладці. Еквівалент \x0b і \cK |
POSIX символ¶
Іноді ви можете побачити «символ POSIX» (також відомий як «клас символів POSIX»). Однак автор рідко використовує «символ POSIX», тому цей розділ лише для базового розуміння.
POSIX символ | дорівнює |
---|---|
[:alnum:] | [a-zA-Z0-9] |
[:alpha:] | [a-zA-Z] |
[:lower:] | [a-z] |
[:upper:] | [A-Z] |
[:digit:] | [0-9] |
[:space:] | [ \f\n\r\t\v] |
[:graph:] | [^ \f\n\r\t\v] |
[:blank:] | [ \t] |
[:cntrl:] | [\x00-\x1F\x7F] |
[:print:] | [\x20-\x7E] |
[:punct:] | [][!"#$%&'()*+,./:;<=>?@^_`{\ |
[:xdigit:] | [A-Fa-f0-9] |
Знайомство з регулярними виразами¶
Існує багато веб-сайтів для відпрацювання навичок регулярних виразів онлайн, наприклад:
Author: tianci li