Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Командная строка LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 61

Автор Шоттс Уильям

Однако (Ρ‡Ρ‚ΠΎ самоС интСрСсноС) символы ( ) { } ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² BRE ΠΊΠ°ΠΊ мСтасимволы, Ссли ΠΎΠ½ΠΈ экранированы символом ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ слСша, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² ERE присутствиС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ слСша ΠΏΠ΅Ρ€Π΅Π΄ этими ΠΆΠ΅ мСтасимволами ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ… Π² Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π°Π»Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ рассмотрим особСнности, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ ERE, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ grep. Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ ERE поддСрТивался ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ egrep, Π½ΠΎ GNU-вСрсия grep Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ рСгулярныС выраТСния ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π΅Π΅ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -E.

posix

На протяТСнии 1980-Ρ… систСма Unix ΠΎΠ±Ρ€Π΅Π»Π° ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΊ коммСрчСская опСрационная систСма, Π½ΠΎ Π΄ΠΎ 1988-Π³ΠΎ Π² ΠΌΠΈΡ€Π΅ Unix Ρ†Π°Ρ€ΠΈΠ»Π° полная анархия. МногиС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ исходный ΠΊΠΎΠ΄ Unix Ρƒ Π΅Π΅ создатСля β€” ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ AT&T ΠΈ поставляли Ρ€Π°Π·Π½Ρ‹Π΅ вСрсии ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы вмСстС со своими машинами. Однако Π² стрСмлСнии ΠΊ Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ добавлял свои, ΠΏΠ°Ρ‚Π΅Π½Ρ‚ΠΎΠ²Π°Π½Π½Ρ‹Π΅ измСнСния ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡ…ΡƒΠ΄ΡˆΠΈΠ»Π°ΡΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π² ΠΈΠ³Ρ€Ρƒ, ΠΏΠΎΠ±Π΅Π΄ΠΎΠΉ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π»ΠΎ Β«Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅Β» ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅. Π­Ρ‚ΠΎΡ‚ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ истории Unix Π½Ρ‹Π½Π΅ извСстСн ΠΊΠ°ΠΊ Балканизация (Balkanization).

Π’ сСрСдинС 1980-Ρ… институт ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² элСктроники ΠΈ элСктротСхники (Institute of Electrical and Electronics Engineers, IEEE) Π½Π°Ρ‡Π°Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° стандартов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ особСнности Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы Unix (ΠΈ Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ…). Π­Ρ‚ΠΈ стандарты, Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ извСстныС ΠΊΠ°ΠΊ IEEE 1003, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ интСрфСйсы (Application Programming Interface, API), ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² стандартной Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ систСмС. НазваниС POSIX, сокращСнноС ΠΎΡ‚ Β«Portable Operating System InterfaceΒ» (интСрфСйс пСрСносимой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Π³Π΄Π΅ Π±ΡƒΠΊΠ²Π° X Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ звучания), Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π ΠΈΡ‡Π°Ρ€Π΄ΠΎΠΌ Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½ΠΎΠΌ (Π΄Π°, Ρ‚Π΅ΠΌ самым Π ΠΈΡ‡Π°Ρ€Π΄ΠΎΠΌ Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½ΠΎΠΌ) β€” ΠΈ принято IEEE.

Π§Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΠ΅Ρ€Π²ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Ρ… рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ обсудим, Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ (alternation, ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π±ΠΎΡ€Π°) β€” ΠΎΠ½ΠΎ позволяСт Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ совпадСниС с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ выраТСния Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠΌΡƒ символу ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ мноТСству ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… символов, Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ позволяСт Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ совпадСниС с мноТСством строк ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Для дСмонстрации Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ grep ΠΈ echo. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ простоС сопоставлСниС строк:

[[email protected] ~]$ echo "AAA" | grep AAA

AAA

[[email protected] ~]$ echo "BBB" | grep AAA

[[email protected] ~]$

Достаточно простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρƒ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ echo Π½Π° Π²Π²ΠΎΠ΄ grep ΠΈ Π²ΠΈΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Если обнаруТиваСтся совпадСниС, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π²Ρ‹Π²ΠΎΠ΄; Ссли совпадСниС отсутствуСт, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ выводится.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅ΠΌΠΎΠ΅ мСтасимволом Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π΅Ρ€Ρ‚Ρ‹:

[[email protected] ~]$ echo "AAA" | grep -E 'AAA|BBB'

AAA

[[email protected] ~]$ echo "BBB" | grep -E 'AAA|BBB'

BBB

[[email protected] ~]$ echo "CCC" | grep -E 'AAA|BBB'

[[email protected] ~]$

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 'AAA|BBB', ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «совпадСниС со строкой AAA ΠΈΠ»ΠΈ со строкой BBBΒ». Π’Π°ΠΊ ΠΊΠ°ΠΊ это Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ, ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ grep ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -E (вмСсто этого ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ egrep) ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ символа Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π΅Ρ€Ρ‚Ρ‹ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°. Π’ Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡƒΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²:

[[email protected] ~]$ echo "AAA" | grep -E 'AAA|BBB|CCC'

AAA

Для объСдинСния с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ элСмСнтами рСгулярного выраТСния Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки ():

[[email protected] ~]$ grep -Eh '^(bz|gz|zip)' dirlist*.txt

Π­Ρ‚ΠΎΠΌΡƒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π½Π°ΡˆΠΈΡ… списков, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с bz, gz ΠΈΠ»ΠΈ zip. Если ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки, смысл рСгулярного выраТСния измСнится, ΠΈ Π΅ΠΌΡƒ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π°, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с bz ΠΈΠ»ΠΈ содСрТащиС gz ΠΈΠ»ΠΈ zip:

[[email protected] ~]$ grep -Eh '^bz|gz|zip' dirlist*.txt

ΠšΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ рСгулярныС выраТСния ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ нСсколько способов опрСдСлСния числа совпадСний с элСмСнтом.

? β€” совпадСниС с элСмСнтом ноль ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·

Π­Ρ‚ΠΎΡ‚ ΠΊΠ²Π°Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ фактичСски ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚: «совпадСниС с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ элСмСнтом Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΒ». ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°, ΠΈ прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π½ΠΎΠΌΠ΅Ρ€ допустим, Ссли прСдставлСн Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π΄Π²ΡƒΡ… Ρ„ΠΎΡ€ΠΌ: (nnn) nnn-nnnn ΠΈΠ»ΠΈ nnn nnn-nnnn, Π³Π΄Π΅ n β€” это Ρ†ΠΈΡ„Ρ€Π°. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

^\(?[0-9][0-9][0-9]\)? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$

Π’ этом Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π·Π° ΠΊΡ€ΡƒΠ³Π»Ρ‹ΠΌΠΈ скобками ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π·Π½Π°ΠΊΠΈ вопроса, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅, Ρ‡Ρ‚ΠΎ скобки ΠΌΠΎΠ³ΡƒΡ‚ Π»ΠΈΠ±ΠΎ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. И снова, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ мСтасимволами (Π² ERE), ΠΌΡ‹ экранировали ΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ слСшами, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΊΠ°ΠΊ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

[[email protected] ~]$ echo "(555) 123-4567" | grep -E '^\(?[0-9][0-9][0-9]\)? [0-9][0-9][0-9]$'

(555) 123-4567

[[email protected] ~]$ echo "555 123-4567" | grep -E '^\(?[0-9][0-9][0-9]\)? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$'

555 123-4567

[[email protected] ~]$ echo "AAA 123-4567" | grep -E '^\(?[0-9][0-9][0-9]\)? [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$'

[[email protected] ~]$

Π—Π΄Π΅ΡΡŒ рСгулярному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠ±Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ записи Π½ΠΎΠΌΠ΅Ρ€Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°, Π½ΠΎ Π΅ΠΌΡƒ Π½Π΅ соотвСтствуСт Π½ΠΎΠΌΠ΅Ρ€, содСрТащий Π½Π΅Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ символы.

* β€” совпадСниС с элСмСнтом ноль ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·

Подобно мСтасимволу ?, Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠ° (*) ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт; ΠΎΠ΄Π½Π°ΠΊΠΎ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π·Π½Π°ΠΊΠ° вопроса (?), этот элСмСнт ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ любоС число Ρ€Π°Π·, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ‹. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ строка ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ нашим трСбованиям строка Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с большой Π±ΡƒΠΊΠ²Ρ‹, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ любоС число Π±ΡƒΠΊΠ² Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистра ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. Для поиска совпадСний с этим (ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ) ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ прСдлоТСния Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ рСгулярным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ:

[[:upper:]][[:upper:][:lower:] ]*\.

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… элСмСнтов: Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках с классом символов [:upper:], Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках с двумя классами символов, [:upper:] ΠΈ [:lower:], ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ, ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°, экранированная ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ слСшСм. Π’Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт сопровоТдаСтся мСтасимволом *, поэтому Π² нашСм ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ любоС число Π±ΡƒΠΊΠ² Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистра ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ², ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π±ΡƒΠΊΠ²ΠΎΠΉ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ рСгистра:

[[email protected] ~]$ echo "This works." | grep -E '[[:upper:]][[:upper:][:lower:] ]*\.'

This works.

[[email protected] ~]$ echo "This Works." | grep -E '[[:upper:]][[:upper:][:lower:] ]*\.'

This Works.

[[email protected] ~]$ echo "this does not" | grep -E '[[:upper:]][[:upper:][:lower:] ]*\.'

[[email protected] ~]$

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, Π° Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ β€” Π½Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ отсутствуСт ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ рСгистра ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ°.

+ β€” совпадСниС с элСмСнтом ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·

ΠœΠ΅Ρ‚Π°ΡΠΈΠΌΠ²ΠΎΠ» + дСйствуСт ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ *, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ совпадСния с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ элСмСнтом Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π°. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ рСгулярному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строки, состоящиС ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏ, Π½Π°ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½Ρ‹Ρ… символов ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ: