Онлайн робочі станції OnWorks Linux та Windows

логотип

Безкоштовний онлайн-хостинг для робочих станцій

<Попередній | зміст | Наступна>

Чергування

Перша з функцій розширеного регулярного виразу, яку ми обговоримо, називається чергування, що є інструментом, який дозволяє здійснювати збіг із набору виразів. Подібно до того, як вираз у дужках дозволяє знайти відповідність одному символу з набору вказаних символів, чергування дозволяє збіги з набору рядків або інших регулярних виразів.

Для демонстрації ми скористаємося GREP в поєднанні з нудьгувати. Спочатку давайте спробуємо звичайну стару відповідність рядка:



[me@linuxbox ~]$ луна "ААА" | grep AAA

AAA

[me@linuxbox ~]$ луна "ВВВ" | grep AAA

[me@linuxbox ~]$

[me@linuxbox ~]$ луна "ААА" | grep AAA

AAA

[me@linuxbox ~]$ луна "ВВВ" | grep AAA

[me@linuxbox ~]$


Досить простий приклад, у якому ми передаємо вихід нудьгувати в GREP і побачити результати. Коли відбувається збіг, ми бачимо його роздрукованим; коли не відбувається збігу, ми не бачимо результатів.

Тепер ми додамо чергування, позначене метасимволом вертикальної смуги:



[me@linuxbox ~]$ луна "ААА" | grep -E 'AAA|BBB'

AAA

[me@linuxbox ~]$ луна "ВВВ" | grep -E 'AAA|BBB'

BBB

[me@linuxbox ~]$ луна "CCC" | grep -E 'AAA|BBB'

[me@linuxbox ~]$

[me@linuxbox ~]$ луна "ААА" | grep -E 'AAA|BBB'

AAA

[me@linuxbox ~]$ луна "ВВВ" | grep -E 'AAA|BBB'

BBB

[me@linuxbox ~]$ луна "CCC" | grep -E 'AAA|BBB'

[me@linuxbox ~]$


Тут ми бачимо регулярний вираз 'AAA|BBB', що означає «відповідність рядку AAA або рядок BBB». Зауважте, що оскільки це розширена функція, ми додали -E варіант до GREP (хоча ми могли б просто використати егреп натомість програма), і ми взяли регулярний вираз у лапки, щоб оболонка не інтерпретувала метасимвол вертикальної смуги як оператор конвейера. Чергування не обмежується двома варіантами:



[me@linuxbox ~]$ луна "ААА" | grep -E 'AAA|BBB|CCC'

AAA

[me@linuxbox ~]$ луна "ААА" | grep -E 'AAA|BBB|CCC'

AAA


Щоб поєднати чергування з іншими елементами регулярного виразу, ми можемо використовувати (), щоб розділити чергування:



[me@linuxbox ~]$ grep -Eh '^(bz|gz|zip)' dirlist*.txt

[me@linuxbox ~]$ grep -Eh '^(bz|gz|zip)' dirlist*.txt


Цей вираз відповідатиме іменам файлів у наших списках, які починаються з «bz», «gz» або «zip». Якби ми виключили дужки, значення цього регулярного виразу:



[me@linuxbox ~]$ grep -Eh '^bz|gz|zip' dirlist*.txt

[me@linuxbox ~]$ grep -Eh '^bz|gz|zip' dirlist*.txt


зміни, щоб відповідати будь-якому імені файлу, яке починається з «bz» або містить "gz" або містить «блискавка».


Найпопулярніші хмарні обчислення ОС на OnWorks: