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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«UNIX β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ срСда программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 30

Автор Π‘Ρ€Π°ΠΉΠ°Π½ ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½

Π’Π°Π±Π»ΠΈΡ†Π° 4.1: РСгулярныС выраТСния grep ΠΈ egrep (Π² порядкС убывания ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°)


ΠœΠ΅Ρ‚Π°ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ ^ ΠΈ $ ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ шаблон ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ (^) ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ†Ρƒ ($) строки. НапримСр,

$ grep From $MAIL

ΠΈΡ‰Π΅Ρ‚ строки, содСрТащиС From Π² вашСй ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΉ посылкС, Π½ΠΎ

$ grep '^From' $MAIL

Π²Ρ‹Π΄Π°Π΅Ρ‚ строки, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с From, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, вСроятнСС всСго, Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ строками сообщСний. ΠœΠ΅Ρ‚Π°ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ с мСтасимволами ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, поэтому всСгда ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ grep Π² апострофы.

Команда grep допускаСт классы символов, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ: Ρ‚Π°ΠΊ, [a-z] Π·Π°Π΄Π°Π΅Ρ‚ Π»ΡŽΠ±ΡƒΡŽ ΡΡ‚Ρ€ΠΎΡ‡Π½ΡƒΡŽ Π±ΡƒΠΊΠ²Ρƒ. Но Π΅ΡΡ‚ΡŒ ΠΈ различия β€” Ссли класс символов ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ grep начинаСтся с символа слабого ударСния Ρ‚ΠΎ шаблон Π·Π°Π΄Π°Π΅Ρ‚ любой символ, ΠΊΡ€ΠΎΠΌΠ΅ входящих Π² Π΄Π°Π½Π½Ρ‹ΠΉ класс. Π—Π½Π°Ρ‡ΠΈΡ‚, [^0-9] Π·Π°Π΄Π°Π΅Ρ‚ любой символ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ†ΠΈΡ„Ρ€Ρ‹. Как ΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅, обратная дробная Ρ‡Π΅Ρ€Ρ‚Π° экранируСт символы ] ΠΈ - Π² классС символов, Π½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ grep ΠΈ ed Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эти символы использовались Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСдвусмыслСнно. НапримСр, шаблон [][-] Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΈΠ»ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΡƒΡŽ скобку Π»ΠΈΠ±ΠΎ Π·Π½Π°ΠΊ минус.

Π’ΠΎΡ‡ΠΊΠ° '.' эквивалСнтна '?' Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅: ΠΎΠ½Π° Π·Π°Π΄Π°Π΅Ρ‚ любой символ. (Π’ΠΎΡ‡ΠΊΠ°, ΠΏΠΎ всСй видимости, Π΅ΡΡ‚ΡŒ символ, Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.) НиТС приводятся Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

$ ls -l | grep '^d'         Бписок ΠΈΠΌΠ΅Π½ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²

$ ls -l | grep '^.......rw' Бписок Ρ„Π°ΠΉΠ»ΠΎΠ², доступных всСм для чтСния ΠΈ записи

Π‘ΠΈΠΌΠ²ΠΎΠ» '^' ΠΈ сСмь Ρ‚ΠΎΡ‡Π΅ΠΊ Π·Π°Π΄Π°ΡŽΡ‚ Π»ΡŽΠ±Ρ‹Π΅ сСмь символов Π² Π½Π°Ρ‡Π°Π»Π΅ строки; Π² случаС примСнСния ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ls -l задаСтся любая строка ΠΏΡ€Π°Π²Π° доступа.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ "ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒ" ('*') ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΊ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΡΡŽΡ‰Π΅ΠΌΡƒ Π΅Π΅ символу ΠΈΠ»ΠΈ мСтасимволу (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ класс символов), ΠΈ вмСстС ΠΎΠ½ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ любоС число Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ символа ΠΈΠ»ΠΈ мСтасимвола. НапримСр, x* Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΡƒΠΊΠ² x ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, [a-zA-Z]* β€” Π»ΡŽΠ±ΡƒΡŽ строку Π±ΡƒΠΊΠ², .* β€” всС Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° строки, Π° .*x β€” всС Π΄ΠΎ послСднСго символа x Π² строкС Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. НСобходимо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ нСсколько Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ², связанных с ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅Π»Π΅ΠΌ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒ дСйствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΠ΄ΠΈΠ½ символ, поэтому xy* соотвСтствуСт x, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΈΠ΄ΡƒΡ‚ yy..., Π½ΠΎ Π½Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚ΠΈΠΏΠ° xyxyxy. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, любоС число Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½ΡƒΠ»ΡŒ, поэтому Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ символ присутствовал, Π² шаблонС Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ. НапримСр, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΌ строку Π±ΡƒΠΊΠ², являСтся Ρ‚Π°ΠΊΠΎΠ΅: [a-zA-Z][a-zA-Z]* (Π±ΡƒΠΊΠ²Π°, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ слСдуСт Π½ΡƒΠ»ΡŒ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π±ΡƒΠΊΠ²). РСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ .* соотвСтствуСт β€” *, Ρ‚.Π΅. мСтасимволу ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌΡƒ для ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ².

Ни ΠΎΠ΄Π½ΠΎ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ grep Π½Π΅ соотвСтствуСт символу ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки; выраТСния ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкой Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. РСгулярныС выраТСния Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ grep простым языком программирования. ВспомнитС, Ρ‡Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Ρ„Π°ΠΉΠ»Π° ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ содСрТит Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ поиск ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… пароля:

$ grep '^[^:]*::' /etc/passwd

Π¨Π°Π±Π»ΠΎΠ½ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ΡΡ Ρ‚Π°ΠΊ: Π½Π°Ρ‡Π°Π»ΠΎ строки, любоС число символов, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ двоСточия, Π΄Π²Π° двоСточия.

Команда grep β€” ΡΡ‚Π°Ρ€Π΅ΠΉΡˆΠ°Ρ Π² сСмСйствС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ относятся ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ fgrep ΠΈ egrep. Π’ основном ΠΈΡ… дСйствиС ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, Π½ΠΎ fgrep ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ нСсколько Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… строк, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ egrep ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ настоящиС рСгулярныС выраТСния, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ grep, Π½ΠΎ с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ "or" ΠΈ скобок для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ объяснСно Π½ΠΈΠΆΠ΅.

ОбС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, fgrep ΠΈ egrep, ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„Π»Π°Π³ -f для указания Ρ„Π°ΠΉΠ»Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ читаСтся шаблон. Π’ этом Ρ„Π°ΠΉΠ»Π΅ символы ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строк Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΏΡ€ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ поискС. Допустим, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слова Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… слов, помСстив ΠΈΡ… Π² Ρ„Π°ΠΉΠ» ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π½Π° строкС ΠΈ воспользовавшись ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ fgrep:

$ fgrep -f Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅_ошибки Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

РСгулярныС выраТСния, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ egrep (ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π». 4.1), β€” Ρ‚Π΅ ΠΆΠ΅ самыС, Ρ‡Ρ‚ΠΎ ΠΈ Π² grep, Π½ΠΎ с нСбольшими добавлСниями. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ скобки для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ, поэтому (xy)* Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΡƒΡΡ‚ΡƒΡŽ строку ΠΈΠ»ΠΈ Π»ΡŽΠ±ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ xy, xyxy, xyxyxy ΠΈ Ρ‚.Π΄. Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ Ρ‡Π΅Ρ€Ρ‚Π° | являСтся ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ or (ΠΈΠ»ΠΈ); today|tomorrow соотвСтствуСт today ΠΈΠ»ΠΈ tomorrow, ΠΊΠ°ΠΊ ΠΈ to(day|morrow). НаконСц, Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ egrep Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Π΄Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ повторСния: + ΠΈ ?. Π¨Π°Π±Π»ΠΎΠ½ x+ Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ символов x, Π° шаблон x? β€” Π½ΡƒΠ»ΡŒ ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ символ x (Π½ΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅).

Команда egrep прСкрасно ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΈΠ³Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² словарС слова со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ свойствами. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ ВСбстСра (Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅), хранящСмуся Π² Ρ„Π°ΠΉΠ»Π΅ Π² Π²ΠΈΠ΄Π΅ списка слов ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π² строкС Π±Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΈΡ… значСния. Π’ вашСй систСмС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСбольшой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ /usr/dict/words, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ правописания; просмотритС Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ шаблон, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ слова английского языка, содСрТащиС всС ΠΏΡΡ‚ΡŒ гласных Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС:

$ cat alphvowels

^[^aeiou]*a[^aeiou]*e[^aeiou]*i[^aeiou]*o[^aeiou]*u[^aeiou]*$

$ egrep -f alphvowels /usr/dict/web2 | 3

abstemious abstemiously abstentions

achelious  acheirous    acleistous

affectious annelidous   arsenious

arterious  bacterious   caesious

facetious  facetiously  fracedinous

majestious

$

Π’ Ρ„Π°ΠΉΠ»Π΅ alphvowels шаблон Π½Π΅ взят Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Если ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ для экранирования шаблона Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ egrep, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ, Π½ΠΎ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚, ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° egrep Π½ΠΈΠΊΠΎΠ³Π΄Π° "Π½Π΅ ΡƒΠ·Π½Π°Π΅Ρ‚" ΠΎ Π½ΠΈΡ…. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π½Π΅ заглядываСт Π² Ρ„Π°ΠΉΠ», ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ содСрТимого Ρ„Π°ΠΉΠ»Π°. Для этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ grep, Π½ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ egrep Ρ‚Π°ΠΊΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° осущСствляСт поиск Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС Π² случаС шаблонов с повторитСлями, особСнно ΠΏΡ€ΠΈ просмотрС Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ².

Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ трСбуСтся Π½Π°ΠΉΡ‚ΠΈ всС английскиС слова, состоящиС ΠΈΠ· ΡˆΠ΅ΡΡ‚ΠΈ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π±ΡƒΠΊΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠΊΠ²Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС:

$ cat monotonic

^a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?r?s?t?u?v?w?x?y?z?$

$ egrep -f monotonic /usr/dict/web2 | grep '......' | 5

abdest acfcnow adipsy  agnosy almost

bedfist behint befcnow bijoux biopsy

chintz  dehors dehort  demos  dimpsy

egilops ghosty

(Egilops β€” это болСзнь, ΠΏΠΎΡ€Π°ΠΆΠ°ΡŽΡ‰Π°Ρ ΠΏΡˆΠ΅Π½ΠΈΡ†Ρƒ.) ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° использованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ grep для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° egrep.

Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚Ρ€ΠΈ сходныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹? ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° fgrep Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ мСтасимволы, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ тысячи слов (послС ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ†ΠΈΠΈ врСмя Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ зависит ΠΎΡ‚ числа слов), ΠΈ поэтому ΠΎΠ½Π° примСняСтся ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго для Π·Π°Π΄Π°Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° библиографичСского поиска. Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… шаблонов для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ fgrep прСвосходят возмоТности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… grep ΠΈ egrep. Различия ΠΌΠ΅ΠΆΠ΄Ρƒ двумя послСдними ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° egrep появилась Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅. Она ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ рСгулярныС выраТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ed, Π² Π½Π΅ΠΉ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ рСгулярныС выраТСния ΠΈ большой Π½Π°Π±ΠΎΡ€ Ρ„Π»Π°Π³ΠΎΠ². ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° egrep ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠ΅ выраТСния (Π½Π΅ считая ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Ρ…), ΠΈ выполняСтся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС (со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, Π½Π΅ зависящСй ΠΎΡ‚ шаблона), Π½ΠΎ Π΅Π΅ стандартная вСрсия Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ†ΠΈΡŽ Π² случаС слоТного выраТСния. БущСствуСт новая вСрсия, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π°Ρ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ egrep ΠΈ grep Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ поиска ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 4.1

ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΠΎ рСгулярных выраТСниях (\( ΠΈ \)) Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ 1 ΠΈΠ»ΠΈ справочном руководствС ΠΏΠΎ ed(1). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ grep для поиска ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌΠΎΠ² β€” слов, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ с ΠΊΠΎΠ½Ρ†Π° ΠΈ Π½Π°Ρ‡Π°Π»Π°. Подсказка: ΡΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ свой шаблон для слов ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 4.2

Алгоритм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ grep Ρ‚Π°ΠΊΠΎΠ²: ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ строку, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π΅ Π½Π° Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ шаблона, Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ». Как повлияло Π±Ρ‹ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ рСгулярныС выраТСния ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки?

4.2 Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ прСдставим Π²Π°ΠΌ Π½Π°Π±ΠΎΡ€ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… систСмных Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ², ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΈΡ… возмоТности ΠΈ Π΄Π°Π΄ΠΈΠΌ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования. Бписок этих Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΏΠΎΠ»ΠΎΠ½ β€” сущСствуСт Π΅Ρ‰Π΅ мноТСство Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ², входящих Π² ΡΠ΅Π΄ΡŒΠΌΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, каТдая Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π°Ρ систСма ΠΈΠΌΠ΅Π΅Ρ‚ свои спСцифичСскиС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹. ВсС стандартныС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ описаны Π² Ρ€Π°Π·Π΄. 1 справочного руководства ΠΏΠΎ UNIX.