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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Командная строка Linux. ПолноС руководство». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 60

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ подвыраТСния. ΠŸΠ΅Ρ€Π²ΠΎΠΌΡƒ соотвСтствуСт мСсяц, Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ β€” число мСсяца ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ β€” Π³ΠΎΠ΄. БоотвСтствСнно строку Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

\3-\1-\2

Ρ‡Ρ‚ΠΎ даст Π½Π°ΠΌ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‚Π°ΠΊΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: Π³ΠΎΠ΄, дСфис, мСсяц, дСфис, число мСсяца.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наша ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Π»Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

sed 's/([0-9]{2})/([0-9]{2})/([0-9]{4})$/\3-\1-\2/' distros.txt

Но ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π΄Π²Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. ΠŸΠ΅Ρ€Π²Π°Ρ: Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ слСши Π² рСгулярном Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π·Π°ΠΏΡƒΡ‚Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ sed, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° попытаСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ s. Вторая: Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ sed ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ простыС рСгулярныС выраТСния, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ символы Π² нашСм рСгулярном Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹, Π° Π½Π΅ ΠΊΠ°ΠΊ мСтасимволы. ΠœΡ‹ Ρ€Π΅ΡˆΠΈΠΌ ΠΎΠ±Π΅ Β­ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² символы ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ слСша для экранирования Π½ΡƒΠΆΠ½Ρ‹Ρ… символов:

sed 's/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/' distros.txt

И дСло в шляпС!

Другая ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ s β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π»Π°Π³ΠΎΠ² вслСд Π·Π° строкой Π·Π°ΠΌΠ΅Π½Ρ‹. НаиболСС ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ· Π½ΠΈΡ… являСтся Ρ„Π»Π°Π³ g, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ sed ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ поиск с Π·Π°ΠΌΠ΅Π½ΠΎΠΉ ΠΊ строкС глобально (globally), Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΌΡƒ совпадСнию, ΠΊΠ°ΠΊ это дСлаСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

НапримСр:

[ [email protected] ~]$ echo "aaabbbccc" | sed 's/b/B/'

aaaBbbccc

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π·Π°ΠΌΠ΅Π½Π° Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния Π±ΡƒΠΊΠ²Ρ‹ b, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ. Π”ΠΎΠ±Π°Π²ΠΈΠ² Ρ„Π»Π°Π³ g, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС вхоТдСния:

[ [email protected]uxbox ~]$ echo "aaabbbccc" | sed 's/b/B/g'

aaaBBBccc

Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ sed Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. Однако сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС ΠΊΠΎΠΌΠ°Π½Β­Π΄Ρ‹ Π² Ρ„Π°ΠΉΠ»Π°Ρ… сцСнариСв ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ эти сцСнарии с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° -f. Для дСмонстрации создадим с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ sed ΠΎΡ‚Ρ‡Π΅Ρ‚ Π½Π° основС нашСго Ρ„Π°ΠΉΠ»Π° distros.txt. ΠžΡ‚Ρ‡Π΅Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π²Π²Π΅Ρ€Ρ…Ρƒ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ Π΄Π°Ρ‚Ρ‹ ΠΈ названия дистрибутивов Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр. Для этого Π½Π°ΠΌ понадобится Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ сцСнарий, поэтому запуститС тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки:

# Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ для sed, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΎ дистрибутивах Linux

1 i\

\

Linux Distributions Report\

s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/

y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ сцСнарий Π² Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ distros.sed ΠΈ запуститС Π΅Π³ΠΎ:

[ [email protected] ~]$ sed -f distros.sed distros.txt

Linux Distributions Report

SUSE 10.2 2006-12-07

FEDORA 10 2008-11-25

SUSE 11.0 2008-06-19

UBUNTU 8.04 2008-04-24

FEDORA 8 2007-11-08

SUSE 10.3 2007-10-04

UBUNTU 6.10 2006-10-26

FEDORA 7 2007-05-31

UBUNTU 7.10 2007-10-18

UBUNTU 7.04 2007-04-19

SUSE 10.1 2006-05-11

FEDORA 6 2006-10-24

FEDORA 9 2008-05-13

UBUNTU 6.06 2006-06-01

UBUNTU 8.10 2008-10-30

FEDORA 5 2006-03-20

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, сцСнарий Π²Ρ‹Π΄Π°Π» ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π½ΠΎ ΠΊΠ°ΠΊ ΠΎΠ½ это сдСлал? Π”Π°Π²Π°ΠΉΡ‚Π΅ вСрнСмся Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ. Π’Ρ‹Π²Π΅Π΄Π΅ΠΌ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ cat Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π»Π° строки.

[ [email protected] ~]$ cat -n distros.sed

1 # Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ для sed, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΎ дистрибутивах Linux

2

3 1 i\

4 \

5 Linux Distributions Report\

6

7 s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/

8 y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/

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

Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2 β€” это пустая строка. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ пустыС строки для удобочитаСмости.

МногиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ sed ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ строк. АдрСса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΈΠΌ строкам Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ примСняСтся опСрация. АдрСса ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² Ρ„ΠΎΡ€ΠΌΠ΅ простых Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² строк, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π° $, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ послСднСй Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строкС.

Π’ строках с 3-ΠΉ ΠΏΠΎ 6-ю содСрТится тСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ вставлСн ΠΏΠΎ адрСсу 1, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π²Ρ…ΠΎΠ΄Π½ΡƒΡŽ строку. Команда i, сопровоТдаСмая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ· ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ слСша ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ экранированный символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°, ΠΈΠ»ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ символом продолТСния строки. Π­Ρ‚Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях, Π² Ρ‚ΠΎΠΌ числС ΠΈ Π² сцСнариях Π½Π° языкС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, позволяя Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки Π² ΠΏΠΎΡ‚ΠΎΠΊ тСкста Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π½Π΅ воспринимался ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ sed) ΠΊΠ°ΠΊ ΠΊΠΎΠ½Π΅Ρ† строки. Команда i, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° a (добавлСния тСкста Π² ΠΊΠΎΠ½Π΅Ρ†) ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° c (Π·Π°ΠΌΠ΅Π½Ρ‹ тСкста), ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строках тСкста, ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ каТдая ΠΈΠ· Π½ΠΈΡ…, ΠΊΡ€ΠΎΠΌΠ΅ послСднСй, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ символом продолТСния строки. ШСстая строка Π² нашСм сцСнарии фактичСски Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ вставляСмый тСкст ΠΈ заканчиваСтся ΡƒΠΆΠ΅ Π½Π΅ символом продолТСния строки, Π° простым ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ строки, сообщая ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ i.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

Π‘ΠΈΠΌΠ²ΠΎΠ» продолТСния строки формируСтся ΠΈΠ· ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ слСша ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ сразу Π·Π° Π½ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки. Никаких ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ.

Π‘Ρ‚Ρ€ΠΎΠΊΠ° 7 β€” наша ΠΊΠΎΠΌΠ°Π½Π΄Π° поиска с Π·Π°ΠΌΠ΅Π½ΠΎΠΉ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΅ΠΉ Π½Π΅ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ адрСс, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅.

Π‘Ρ‚Ρ€ΠΎΠΊΠ° 8 выполняСт ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Π±ΡƒΠΊΠ² Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистра Π² Π±ΡƒΠΊΠ²Ρ‹ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ рСгистра. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ tr, ΠΊΠΎΠΌΠ°Π½Π΄Π° y Π² sed Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ символов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, [a-z]), Π½ΠΈ классы символов POSIX. И снова, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ y Π½Π΅ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ адрСс, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅.

ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ sed Ρ‚Π°ΠΊΠΆΠ΅ часто Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚...

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° sed ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΌΠΈ возмоТностями. Π‘ Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ вСсьма слоТныС Π·Π°Π΄Π°Ρ‡ΠΈ, связанныС с Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ° тСкста. Но Ρ‡Π°Ρ‰Π΅ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выполнСния ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… укладываСтся Π² ΠΎΠ΄Π½Ρƒ строку. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ инструмСнты. НаиболСС популярными ΠΈΠ· Π½ΠΈΡ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ awk ΠΈ perl. Они Π½Π΅ относятся ΠΊ разряду простых инструмСнтов, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, обсуТдаСмыС здСсь, Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΌΠΈ языками программирования. perl, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, часто примСняСтся Π²Π·Π°ΠΌΠ΅Π½ языка ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡ систСмного администрирования, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ большой ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠ°ΠΊ срСдство Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. awk ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ·ΠΊΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ примСнСния. ОсновноС Π΅Π³ΠΎ достоинство Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² возмоТности управлСния Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Он Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ sed Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° awk ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ построчной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ схСму, ΠΏΠΎΡ…ΠΎΠΆΡƒΡŽ Π½Π° адрСса Π² sed со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π·Π° Π½ΠΈΠΌΠΈ опСрациями. Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ обсуТдСниС awk ΠΈ perl Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ этой ΠΊΠ½ΠΈΠ³ΠΈ, ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ инструмСнтами для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π² Linux.

aspell β€” интСрактивная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΡ€Ρ„ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ


ПослСдний инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ рассмотрим Π² этой Π³Π»Π°Π²Π΅, β€” ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° aspell, ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ срСдство ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΎΡ€Ρ„ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° aspell являСтся ΠΏΡ€Π΅Π΅ΠΌΠ½ΠΈΡ†Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ispell, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠ΅ΠΉ ΠΏΡ€Π΅ΠΆΠ΄Π΅, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π΅Π΅ Π·Π°ΠΌΠ΅Π½Π°. Π§Π°Ρ‰Π΅ всСго ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° aspell ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° функция ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΎΡ€Ρ„ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ aspell ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ вСсьма эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Она способна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ тСкстовыС Ρ„Π°ΠΉΠ»Ρ‹ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ HTML, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° C/C++, элСктронныС письма ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ тСкста.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΎΡ€Ρ„ΠΎΠ³Ρ€Π°Ρ„ΠΈΡŽ Π² Ρ„Π°ΠΉΠ»Π΅ с простым тСкстом, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ aspell, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

aspell check тСкстовый_Ρ„Π°ΠΉΠ»

Π³Π΄Π΅ тСкстовый_Ρ„Π°ΠΉΠ» β€” это имя Ρ„Π°ΠΉΠ»Π° для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Π’ качСствС практичСского ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° создадим простой тСкстовый Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ foo.txt, содСрТащий нСсколько ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… орфографичСских ошибок:

[ [email protected] ~]$ cat > foo.txt

The quick brown fox jimped over the laxy dog.

Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ aspell:

[ [email protected] ~]$ aspell check foo.txt

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ (check) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° aspell дСйствуСт ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ экран:

The quick brown fox jimped over the laxy dog.

______________________________________________________________

1) jumped 6) wimped

2) gimped 7) camped

3) comped 8) humped

4) limped 9) impede

5) pimped 0) umped

i) Ignore I) Ignore all

r) Replace R) Replace all

a) Add l) Add Lower

b) Abort x) Exit

______________________________________________________________

?

Π’ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части экрана выводится тСкст с Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ словом. Π’ сСрСдинС β€” 10 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² исправлСния ошибки, ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ 0 Π΄ΠΎ 9, Π° Π·Π°Ρ‚Π΅ΠΌ слСдуСт список Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… дСйствий. НаконСц, Π² самом Π½ΠΈΠ·Ρƒ выводится ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ ΠΊ Π²Π²ΠΎΠ΄Ρƒ, Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ наш Π²Ρ‹Π±ΠΎΡ€.