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

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

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

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ Ρ‚Π°ΠΊΠΈΠ΅ срСдства, ΠΊΠ°ΠΊ Ρ†ΠΈΠΊΠ»Ρ‹, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ < ΠΈ >, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ *, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этих срСдств Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎ Π²ΠΎ всСх ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. НСкоторыС срСдства, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹, Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ядром, Π½ΠΎ язык shell прСдоставляСт Π΅ΡΡ‚Π΅ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ запись для ΠΈΡ… создания. Они Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ΄ΠΎΠ±Π½Ρ‹, Π½ΠΎ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ систСмы Π² Ρ†Π΅Π»ΠΎΠΌ.

Π‘Π°Π·ΠΎΠΉ для ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° слуТит ядро систСмы UNIX, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, хотя ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ опрСдСляСт ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹, ΠΈΠΌΠ΅Π½Π½ΠΎ ядро осущСствляСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ Π½ΠΈΠΌ. Бпособ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ систСма ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ выполняСмыС Ρ„Π°ΠΉΠ»Ρ‹, позволяСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ оттранслированным ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, β€” для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΡ… Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ трСбуСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ‚ΠΈΠΏΠ° RUN. Π‘Π°ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ являСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π° Π½Π΅ Ρ‡Π°ΡΡ‚ΡŒΡŽ ядра. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ, Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с Π½ΠΈΠΌ, ΠΊΠ°ΠΊ с любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ являСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Π½ΠΎ здСсь ΠΎΠ½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎΠ»Π½Π΅Π΅, Ρ‡Π΅ΠΌ Π³Π΄Π΅ Π±Ρ‹ Ρ‚ΠΎ Π½ΠΈ Π±Ρ‹Π»ΠΎ.

Π’ Π³Π». 5 ΠΌΡ‹ вСрнСмся ΠΊ Ρ‚Π΅ΠΌΠ΅ программирования Π½Π° языкС shell, Π° ΠΏΠΎΠΊΠ° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅: Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ, Π²Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π½Π° Π΅Π³ΠΎ языкС (Ρ‡Π΅ΠΌ Π² основном ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ΡΡ Π΅Π³ΠΎ достоинства).

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠ°Ρ ΠΈ библиографичСская справка

На языкС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ с нСзапамятных Π²Ρ€Π΅ΠΌΠ΅Π½. Π‘ΠΏΠ΅Ρ€Π²Π° Π±Ρ‹Π»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для if, goto ΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ, Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° goto Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ ΠΏΡƒΡ‚Π΅ΠΌ просмотра Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΎΡ‚ Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΈ. (ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π», нСльзя Π±Ρ‹Π»ΠΎ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌΡƒ ΠΊΠ°Π½Π°Π»Ρƒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ структуры управлСния.)

БСдьмая вСрсия ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π±Ρ‹Π»Π° создана Π‘. Π‘ΠΎΡƒΡ€Π½ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠΊΠ°Π·Π°Π» ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΈ ΠΈΠ΄Π΅ΠΉΠ½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π”. МэшСй. Как Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π² Π³Π». 5, здСсь Π΅ΡΡ‚ΡŒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для программирования. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ: Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· ограничСния ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π² Π½ΠΈΡ…. ΠΠ΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΌ свойством ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° являСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° мСтасимволов Π² ΠΈΠΌΠ΅Π½Π°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²; Π² Ρ€Π°Π½Π½ΠΈΡ… вСрсиях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ лишь Π½Π° ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, ΠΎΠ½Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π»Π°ΡΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ (Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ с Π½ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ) β€” csh, Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Π‘ΠΈ-shell, созданный Π‘. Π”ΠΆΠΎΠ΅ΠΌ Π½Π° Π±Π°Π·Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΡˆΠ΅ΡΡ‚ΠΎΠΉ вСрсии. По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π‘ΠΎΡƒΡ€Π½Π° этот ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π»ΡƒΡ‡ΡˆΠ΅ обСспСчиваСт Π΄ΠΈΠ°Π»ΠΎΠ³. Он прСдоставляСт срСдство "история", ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ Π² сокращСнной записи (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, с нСбольшим Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ) ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. ΠžΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ синтаксис ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ДТоя. Но, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π‘ΠΈ-shell, базируСтся Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ Ρ€Π°Π½Π½Π΅ΠΉ вСрсии, Π² Π½Π΅ΠΌ содСрТится мСньшС срСдств для программирования; это скорСС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄, Ρ‡Π΅ΠΌ язык программирования. Π’ частности, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌΡƒ ΠΊΠ°Π½Π°Π»Ρƒ ΠΈΠ· (ΠΈΠ»ΠΈ Π²) ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° со структурами управлСния.

Команда pick ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π’. Π”Π°Ρ„Ρ„ΠΎΠΌ, Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° bundle β€” нСзависимо А. Π₯ΡŒΠΈΡ‚ΠΎΠΌ ΠΈ Π”. Гослингом.

Π“Π»Π°Π²Π° 4

Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹

БущСствуСт большоС число ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ UNIX, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ простыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π½ΠΈΠΌ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ grep ΠΈ tail, Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‰ΠΈΠ΅ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, sort, ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Π΅Π³ΠΎ, wc, производящая подсчСт Π² Π½Π΅ΠΌ, ΠΈ Ρ‚.Π΄. Π’Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ.

Π’ настоящСй Π³Π»Π°Π²Π΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹. ΠŸΠ΅Ρ€Π²ΠΎΠΉ ΠΌΡ‹ рассмотрим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ grep, ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΠ²ΡˆΠΈΡΡŒ Π½Π° Π±ΠΎΠ»Π΅Π΅ слоТных ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ…, Ρ‡Π΅ΠΌ описанныС Π² Π³Π». 1, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄Π²Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ родствСнныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” egrep ΠΈ fgrep. Π”Π°Π»Π΅Π΅ Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с Π΅Ρ‰Π΅ нСсколькими ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ tr, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для транслитСрации символов, dd, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… систСм, ΠΈ uniq β€” для обнаруТСния ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ строк. ΠŸΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация ΠΈ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ sort.

ΠšΠΎΠ½Π΅Ρ† Π³Π»Π°Π²Ρ‹ посвящСн Π΄Π²ΡƒΠΌ прСобразоватСлям Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌ. Они Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ записываСтся ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ простом языкС программирования. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ прСобразования. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ здСсь ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… sed ("stream editor" β€” ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€) ΠΈ awk, имя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ составлСно ΠΈΠ· Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π±ΡƒΠΊΠ² ΠΈΠΌΠ΅Π½ Π΅Π΅ Π°Π²Ρ‚ΠΎΡ€ΠΎΠ². ОбС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ ΠΏΡƒΡ‚Π΅ΠΌ обобщСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ grep:

$ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° шаблон-дСйствиС ΠΈΠΌΠ΅Π½Π°_Ρ„Π°ΠΉΠ»ΠΎΠ²...

которая сканируСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ², вСдя поиск строк, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… с шаблоном, β€” Ссли строка Π½Π°ΠΉΠ΄Π΅Π½Π°, выполняСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ дСйствиС. Для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ grep, ΠΊΠ°ΠΊ ΠΈ для Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ed, шаблоном являСтся рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π° дСйствиС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ сводится ΠΊ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… sed ΠΈ awk ΠΎΠ±ΠΎΠ±Ρ‰Π°ΡŽΡ‚ΡΡ ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, ΠΈ дСйствия. Команда sed, производная ΠΎΡ‚ ed, выполняСт "ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ", ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ рСдактирования. Она пропускаСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, выполняя для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Команда awk Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠ΄ΠΎΠ±Π½Π°, ΠΊΠ°ΠΊ sed, для манипуляций с тСкстом, Π½ΠΎ Π² Π½Π΅ΠΉ прСдусмотрСны арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ язык программирования, схоТий с Π‘ΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ Π½Π΅ приводится ΠΏΠΎΠ»Π½ΠΎΠ΅ описаниС ΠΎΠ±Π΅ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ; ΠΎΠ½ΠΎ Π΅ΡΡ‚ΡŒ Π² Ρ‚. 2B справочного руководства ΠΏΠΎ UNIX.

4.1 БСмСйство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ grep

Π’ Π³Π». 1 ΠΌΡ‹ ΠΊΡ€Π°Ρ‚ΠΊΠΎ упомянули ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ grep, Π° Π·Π°Ρ‚Π΅ΠΌ использовали Π΅Π΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ

$ grep шаблон ΠΈΠΌΠ΅Π½Π°_Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ поиск Π² ΠΏΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… ΠΈΠ»ΠΈ Π² стандартном Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ шаблон. Команда grep Π½Π΅ΠΎΡ†Π΅Π½ΠΈΠΌΠ° для поиска ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΈ слов Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ для Π²Ρ‹Π±ΠΎΡ€Π° части Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

$ grep -n variable *.[Π³Π»]           Поиск variable Π² тСкстС Π½Π° Π‘ΠΈ

$ grep From $MAIL                   ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² сообщСний ΠΈΠ· ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΉ

посылки

$ grep From $MAIL | grep -v mary    Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ Π½Π΅ ΠΎΡ‚

адрСсата mary

$ grep -y mary $HOME/lib/phone-book Поиск Π½ΠΎΠΌΠ΅Ρ€Π° mary

$ who | grep mary                   Π’Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ mary Π² систСмС

$ ls | grep -v temp                 ИмСна Ρ„Π°ΠΉΠ»ΠΎΠ², Π½Π΅ содСрТащих temp

Π€Π»Π°Π³ -n ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² строк, Ρ„Π»Π°Π³ -v мСняСт Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ условия, Π° Ρ„Π»Π°Π³ -y допускаСт сопоставлСниС строчных Π±ΡƒΠΊΠ² ΠΈΠ· шаблона с прописными Π±ΡƒΠΊΠ²Π°ΠΌΠΈ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° (Π½ΠΎ прописныС Π±ΡƒΠΊΠ²Ρ‹ всС-Ρ‚Π°ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с прописными).

Π’ΠΎ всСх Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π²ΡˆΠΈΡ…ΡΡ Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… проводился поиск ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… строк ΠΈΠ· Π±ΡƒΠΊΠ² ΠΈ чисСл. Но ΠΊΠΎΠΌΠ°Π½Π΄Π° grep ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТныС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹: ΠΎΠ½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ выраТСния согласно простому языку для описания строк. Π‘ тСхничСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния шаблон прСдставляСт Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стСпСни ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ спСцификаций строк, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ рСгулярным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Команда ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ рСгулярныС выраТСния, ΠΊΠ°ΠΊ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ed. На самом Π΄Π΅Π»Π΅, эта ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±Ρ‹Π»Π° создана (Π·Π° ΠΎΠ΄ΠΈΠ½ Π²Π΅Ρ‡Π΅Ρ€) прямым Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ed.

РСгулярныС выраТСния Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ряду символов, Ρ‚Π°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊ * ΠΈ Ρ‚.ΠΏ., приписываСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ. Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ нСсколько мСтасимволов, Π½ΠΎ, ΠΊ соТалСнию, с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ значСниями. Π’ Ρ‚Π°Π±Π». 4.1 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ всС мСтасимволы рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΈ ΠΌΡ‹ ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΈΡ… здСсь рассмотрим.

с Π›ΡŽΠ±ΠΎΠΉ Π½Π΅ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ символ c соотвСтствуСт самому сСбС \c Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ любоС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ символа c ^ Начало строки $ ΠšΠΎΠ½Π΅Ρ† строки . Π›ΡŽΠ±ΠΎΠΉ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ символ [...] Π›ΡŽΠ±ΠΎΠΉ символ ΠΈΠ· ...; допустимы Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ Ρ‚ΠΈΠΏΠ° a-z [^...] Π›ΡŽΠ±ΠΎΠΉ символ Π½Π΅ ΠΈΠ· ...; допустимы Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ \n Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ n-ΠΌΡƒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ \(...\) (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для grep) r* ΠΡƒΠ»ΡŒ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ r r+ Одно ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ r (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для egrep) r? ΠΡƒΠ»ΡŒ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ r (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для egrep) r1r2 Π—Π° r1 слСдуСт r2 r1|r2 r1 ΠΈΠ»ΠΈ r2 (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для egrep) \(r\) ΠŸΠΎΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠ΅ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ r (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для grep); ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ (r) РСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ r (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для grep); ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ НикакоС рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ соотвСтствуСт ΠΊΠΎΠ½Ρ†Ρƒ строки

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