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

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

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

$ sed 's/\UNIX/\UNIX\ (TM)/g' ΠΈΠΌΠ΅Π½Π°_Ρ„Π°ΠΉΠ»ΠΎΠ²...> Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ

НуТно ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ дСйствиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Она Π½Π΅ измСняСт содСрТимоС своих Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π° лишь ΠΏΠΈΡˆΠ΅Ρ‚ Π² стандартный Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ; исходныС ΠΆΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. Π’Ρ‹ ΡƒΠΆΠ΅ достаточно Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ

$ sed '...' Ρ„Π°ΠΉΠ» > Ρ„Π°ΠΉΠ»

Π½Π΅ Π»ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: для Π·Π°ΠΌΠ΅Π½Ρ‹ содСрТимого Ρ„Π°ΠΉΠ»ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π’ дальнСйшСм ΠΌΡ‹ рассмотрим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ записи Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ»; ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ overwrite Π² (Π³Π». 5).

Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ sed Π²Ρ‹Π΄Π°Π΅Ρ‚ всС строки автоматичСски, поэтому ΠΊΠΎΠΌΠ°Π½Π΄Π° p Π½Π΅ Π½ΡƒΠΆΠ½Π° послС Π²Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π·Π°ΠΌΠ΅Π½Ρ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅; Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ссли ΠΎΠ½Π° задаСтся, Ρ‚ΠΎ каТдая измСняСмая строка пСчатаСтся Π΄Π²Π°ΠΆΠ΄Ρ‹. Однако ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ мСтасимволы ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ sed ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΈ для ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. Рассмотрим, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ du -Π°, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΡƒΡŽ список ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ². ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½Π° Π²Ρ‹Π΄Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ имя Ρ„Π°ΠΉΠ»Π°:

$ du -a ch4*

18 ch4.1

13 ch4.2

14 ch4.3

17 ch4.4

 2 ch4.9

$

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ sed, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ², Π½ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ рСдактирования Π½ΡƒΠΆΠ½Ρ‹ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ символов * ΠΈ табуляции ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ:

$ du -a ch4.* | sed 's/.*β†’//'

ch4.1

ch4.2

ch4.3

ch4.4

ch4.9

$

Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π·Π°ΠΌΠ΅Π½Ρ‹ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ всС символы (.*) Π΄ΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ символа табуляции Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ (ΠΎΠ½ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π² шаблонС ΠΊΠ°ΠΊ β†’). Аналогичным способом ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ· Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ who ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ врСмя Π²Ρ…ΠΎΠ΄Π° Π² систСму:

$ who

lr  tty1 Sep 29 07:14

ron tty3 Sep 29 10:31

you tty4 Sep 29 08:36

td  tty5 Sep 29 08:47

$ who | sed 's/ .* / /'

lr  07:14

ron 10:31

you 08:36

td  08:47

$

Команда s замСняСт ΠΏΡ€ΠΎΠ±Π΅Π» ΠΈ всС, Ρ‡Ρ‚ΠΎ слСдуСт Π·Π° Π½ΠΈΠΌ (максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹) Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ±Π΅Π»Π° Π½Π° СдинствСнный ΠΏΡ€ΠΎΠ±Π΅Π». ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π½ΡƒΠΆΠ½Ρ‹.

ΠŸΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ sed ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ getname, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ:

$ cat getname

who am i | sed 's/ .*//'

$ getname

you $

Другая ΠΊΠΎΠΌΠ°Π½Π΄Π° sed примСняСтся Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ часто, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ помСстили Π΅Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ ind. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° вставляСт ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π΄ΠΎ шага табуляции; ΠΎΠ½Π° ΡƒΠ΄ΠΎΠ±Π½Π° для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ располоТСния тСкста ΠΏΡ€ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ.

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ind просто: достаточно ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ символ табуляции Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки:

$ sed 's/^/β†’/' $* ΠŸΠ΅Ρ€Π²Π°Ρ вСрсия ind

Π’ этой вСрсии символ табуляции вставляСтся Π΄Π°ΠΆΠ΅ Π² ΠΏΡƒΡΡ‚ΡƒΡŽ строку, Ρ‡Ρ‚ΠΎ Π½Π΅ трСбуСтся. Π’ Π»ΡƒΡ‡ΡˆΠ΅ΠΉ вСрсии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ sed Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ строки для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Если ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ шаблон, Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строки, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ:

sed '/./s/^/β†’/' $* Вторая вСрсия

Π¨Π°Π±Π»ΠΎΠ½ /./ Π·Π°Π΄Π°Π΅Ρ‚ Π»ΡŽΠ±ΡƒΡŽ строку, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅ΡΡ‚ΡŒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ символ, ΠΊΡ€ΠΎΠΌΠ΅ символа ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки, поэтому ΠΊΠΎΠΌΠ°Π½Π΄Π° s Π½Π΅ выполняСтся для пустых строк. Вспомним, Ρ‡Ρ‚ΠΎ sed Π²Ρ‹Π΄Π°Π΅Ρ‚ всС строки, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, мСнялись ΠΎΠ½ΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ пустыС строки ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π²Ρ‹Π΄Π°ΡŽΡ‚ΡΡ.

Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ опрСдСлСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ind. МоТно Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚Π΅Ρ… строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π·Π½Π°ΠΊΠΎΠΌ восклицания '!'. Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π΅

sed '/^$/!s/^/β†’/' $* Π’Ρ€Π΅Ρ‚ΡŒΡ вСрсия

шаблон /^$/ Π·Π°Π΄Π°Π΅Ρ‚ пустыС строки (ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки сразу слСдуСт Π·Π° Π΅Π΅ Π½Π°Ρ‡Π°Π»ΠΎΠΌ), поэтому /^$/! прСдписываСт Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для пустых строк.

Как ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, sed ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку автоматичСски, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π½Π΅ΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½Π° Π½Π΅ Π±Ρ‹Π»Π° ΡƒΠ΄Π°Π»Π΅Π½Π°). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ed. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π»Π΅Π³ΠΊΠΎ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ sed, которая Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚, скаТСм, Ρ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… строки Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ:

sed 3q

Π₯отя 3q Π½Π΅ являСтся Π·Π°ΠΊΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ed, для sed ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ смысл: ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ послС Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ.

ΠžΡ‚ вас ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ другая Ρ€Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ вставка ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ². Один ΠΈΠ· способов Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ sed ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ind, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ sed допускаСт нСсколько ΠΊΠΎΠΌΠ°Π½Π΄, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΏΡƒΡ‚Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ обращСния ΠΊ sed (хотя ΠΈ нСсколько Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ):

sed 'S/^/β†’/

3q'

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π³Π΄Π΅ находятся ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΈ символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки: ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… строках, Π½ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈ символы табуляции Π² Π½Π°Ρ‡Π°Π»Π΅ строки.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ΡΡ СстСствСнным с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рассмотрСнных Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ² ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ head, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ нСсколько строк ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ своСго Ρ„Π°ΠΉΠ»Π°-Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Но sed 3q (ΠΈΠ»ΠΈ 10q) Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ просто Π·Π°Π΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² этом Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΎ потрСбности. Однако ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ind, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для sed Π΄Π»ΠΈΠ½Π½Π΅Π΅. (Π’ процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ ΠΊΠ½ΠΈΠ³ΠΎΠΉ ΠΌΡ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° языкС Π‘ΠΈ Π² 30 строк Π½Π° ΠΎΠ΄Π½Ρƒ строку ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ind вСрсии 2, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅.) Π§Π΅Ρ‚ΠΊΠΎΠ³ΠΎ критСрия Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ· слоТной ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π½Π΅Ρ‚, поэтому ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π²Π°ΠΌ своС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: помСститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² свой ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ /bin ΠΈ посмотритС, Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ Π΅Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ.

МоТно ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° sed Π² Ρ„Π°ΠΉΠ» ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ…, получая ΠΎΡ‚Ρ‚ΡƒΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ обращСния:

$ sed -f ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ_Ρ„Π°ΠΉΠ»

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ строкам, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡ… Π½ΠΎΠΌΠ΅Ρ€Π°. Π’Π°ΠΊ, ΠΊΠΎΠΌΠ°Π½Π΄Π°

$ sed '/шаблон/q'

Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° всС строки Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°

$ sed '/шаблон/d'

удаляСт ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ шаблон; ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ происходит Π΄ΠΎ автоматичСского Π²Ρ‹Π²ΠΎΠ΄Π° строк, поэтому ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ строки Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ.

Π₯отя автоматичСский Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠ΄ΠΎΠ±Π΅Π½, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π»Π°Π³Π° -n; Π² этом случаС Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ появятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строки, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ явной ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π²Ρ‹Π²ΠΎΠ΄Π° p. НапримСр,

$ sed -n '/шаблон/p'

эквивалСнтСн ΠΊΠΎΠΌΠ°Π½Π΄Π΅ grep. УсловиС сопоставлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ссли Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Π΅Π³ΠΎ символом !, поэтому

$ sed -n '/шаблон/!p'

эквивалСнтно ΠΊΠΎΠΌΠ°Π½Π΄Π΅ grep -v. (Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ sed '/шаблон/d'.)

Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ sed ΠΈ grep? Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², grep β€” всСго лишь частный случай ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ sed. Π­Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ стСпСни ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ историчСскими ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ: ΠΊΠΎΠΌΠ°Π½Π΄Π° grep появилась Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π° sed. Но ΠΎΠ½Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡ†Π΅Π»Π΅Π»Π°, Π½ΠΎ ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»Π°ΡΡŒ. Π’ силу спСцифики назначСния ΠΎΠ±Π΅ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ grep Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ sed, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΅Π΅ использованиС Π² Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ситуациях Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½ΠΎ, насколько Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Ρƒ Π½Π΅Π΅ Π΅ΡΡ‚ΡŒ возмоТности, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ sed; см., Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, описаниС Ρ„Π»Π°Π³Π° -b). Но всС-Ρ‚Π°ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ "ΡƒΠΌΠΈΡ€Π°Ρ‚ΡŒ". Когда-Ρ‚ΠΎ Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° с ΠΈΠΌΠ΅Π½Π΅ΠΌ gres, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ подстановку, Π½ΠΎ ΠΎΠ½Π° исчСзла ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° появилась ΠΊΠΎΠΌΠ°Π½Π΄Π° sed.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ запись, Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ed, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ символы ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строк с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ sed:

$ sed '/$/\

> /'

Π—Π΄Π΅ΡΡŒ добавляСтся символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС, ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ пустыС строки Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°

$ sed 's/[β†’][β†’]*/\

>/g'

замСняСт ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈΠ»ΠΈ символов табуляции Π½Π° символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки, Ρ‚. Π΅. Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° строки ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ слова. (РСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ '[β†’]' Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π΅Π» ΠΈΠ»ΠΈ символ табуляции, '[β†’]*' Π·Π°Π΄Π°Π΅Ρ‚ Π½ΡƒΠ»ΡŒ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‚Π°ΠΊΠΈΡ… символов, Π° вСсь шаблон β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ/ΠΈΠ»ΠΈ символов табуляции.)

МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² строк для задания Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° строк, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°.

$ sed -n '20,30p'       ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строк с 20-ΠΉ ΠΏΠΎ 30-ю

$ sed '1,10d'           Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ строк с 1-ΠΉ Π΄ΠΎ 10-ΠΉ (=tail +11)

$ sed '1,/^$/cd'        Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ всСх строк Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ пустой Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ

$ sed -n '/^$/,/^end/p' ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ всСх Π³Ρ€ΡƒΠΏΠΏ строк, начиная ΠΎΡ‚ пустой строки Π΄ΠΎ

строки, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅ΠΉΡΡ с end

$ sed '$d'              Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ послСднСй строки

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ с Π½Π°Ρ‡Π°Π»Π° Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°; ΠΎΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ Π½Π΅ происходит с Π½Π°Ρ‡Π°Π»ΠΎΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

Π£ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ sed Π΅ΡΡ‚ΡŒ сущСствСнноС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, отсутствуСт Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ed: Π² Π½Π΅ΠΉ поддСрТиваСтся ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ нумСрация строк. Π’ частности, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ + ΠΈ - Π½Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π² выраТСниях, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΡ… Π½ΠΎΠΌΠ΅Ρ€Π° строк, поэтому Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π½Π°Π·Π°Π΄ Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅: