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

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

Автор ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½ Π‘Ρ€Π°ΠΉΠ°Π½ Уилсон

<i>n</i>r file
Π§ΠΈΡ‚Π°Ρ‚ΡŒ
file
; Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ послС строки n; Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ становится послСдняя прочитанная строка
<i>m</i>,<i>n</i>w file
ΠŸΠΈΡΠ°Ρ‚ΡŒ строки m-n Π²
file
; ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строки Π½Π΅ измСняСтся
<i>m</i>,<i>n</i>w file
Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строки m-n ΠΊ
file
; ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строки Π½Π΅ измСняСтся

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ для

w
ΠΈ
W
(ΠΊΠΎΠΌΠ°Π½Π΄Π°
W
ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½ΠΈΠΆΠ΅ Π² Ρ‚Π°Π±Π». П.1.2) β€” это Ρ†Π΅Π»Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ n ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для
r
Ρ€Π°Π²Π½ΠΎ
$,
Ρ‡Ρ‚ΠΎ прСдставляСтся Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌ. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹.

Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€

ed
Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ использованноС имя Ρ„Π°ΠΉΠ»Π° ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈΠ»ΠΈ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄
r
,
w
. Команда
f
(Ρ„Π°ΠΉΠ») ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΠΈΠ»ΠΈ замСняСт имя Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°:

f
ΠŸΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ имя Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°
f file
Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½ΠΎΠ΅ имя Π½Π° '
file
'

Команда

e
(Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ) вновь Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ed с Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ:

e
ΠΠ°Ρ‡Π°Ρ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»
e file
ΠΠ°Ρ‡Π°Ρ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ '
file
'

Команда

Π΅
Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π° Ρ‚Π΅ΠΌ ΠΆΠ΅ способом, Ρ‡Ρ‚ΠΎ ΠΈ
q
: Ссли Π²Ρ‹ Π½Π΅ записали ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, пСрвая ΠΊΠΎΠΌΠ°Π½Π΄Π°
Π΅
Π²Ρ‹Π΄Π°Π΅Ρ‚ сообщСниС ΠΎΠ± ошибкС;
Π΅
вновь ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ нСзависимо ΠΎΡ‚ внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах
ed
связан с
Π΅
, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° (
Π΅ filename
) ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΈ Π²Π½Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°.

Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π€Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎ записи ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

x
; ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½. Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ происходит Ρ‚Π΅ΠΌ ΠΆΠ΅ способом, Ρ‡Ρ‚ΠΎ ΠΈ Π²
crypt(1)
. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах ΠΊΠΎΠΌΠ°Π½Π΄Π°
x
Π·Π°ΠΌΠ΅Π½Π΅Π½Π° Π½Π°
X
(ΠΏΡ€ΠΎΠΏΠΈΡΠ½ΡƒΡŽ Π±ΡƒΠΊΠ²Ρƒ) Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ случайностСй.

Π‘Π²ΠΎΠ΄ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄

Π’ Ρ‚Π°Π±Π». П.1.2 пСрСчислСны ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, Π° Π² Ρ‚Π°Π±Π». П.1.3 допустимыС Π½ΠΎΠΌΠ΅Ρ€Π° строк. КаТдой ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π½ΡƒΠ»ΡŒ, ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° Π½ΠΎΠΌΠ΅Ρ€Π° строк, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ число ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… строк, Ссли ΠΈΡ… Π½Π΅Ρ‚, принимаСтся соглашСниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π—Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π±ΡƒΠΊΠ²Π° p для Π²Ρ‹Π²ΠΎΠ΄Π° послСднСй ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ строки ΠΈΠ»ΠΈ 1 для Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° списка. Π’Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ становится послСдняя обработанная строка; настройка Π½Π΅ мСняСтся ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ

f
,
k
,
w
,
x
,
=
,
!
.

.Π°
Π’Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π²Π²ΠΎΠ΄ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½Π° строка, содСрТащая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ '
.
'
.,.с
Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ строки, Π½ΠΎΠ²Ρ‹ΠΉ тСкст заканчиваСтся Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
Π°
.,.d
Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ строки
Π΅ file
Π’Π½ΠΎΠ²ΡŒ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
file
. Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ начинаСтся Π΄Π°ΠΆΠ΅ Π² Ρ‚ΠΎΠΌ случаС, Ссли исправлСния Π½Π΅ записаны
f file
Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ имя Ρ„Π°ΠΉΠ»Π° ΠΊΠ°ΠΊ
file
1,$g/re/cmds
Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ
cmds
для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ рСгулярному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ re; ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²
cmds
Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹
\newline
(
\
+"ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки")
.i
Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ тСкст ΠΏΠ΅Ρ€Π΅Π΄ строкой; ΠΎΠ½ заканчиваСтся Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
a
.,.+1j
.Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ строки Π² ΠΎΠ΄Π½Ρƒ
.kc
ΠŸΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ строку Π±ΡƒΠΊΠ²ΠΎΠΉ
с
...l
ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ строки, дСлая Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ символы Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ
.,.m line
ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ строки послС строки
line
.,.p
ΠŸΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ строки
q
Π’Ρ‹ΠΉΡ‚ΠΈ.
Q
Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚, Π΄Π°ΠΆΠ΅ Ссли исправлСния Π½Π΅ записаны
$r file
Π§ΠΈΡ‚Π°Ρ‚ΡŒ
file
.,.s/re/new/
Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ
new
Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ соотвСтствуСт re
.,.t line
Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки послС
line
.u
ΠΠ½Π½ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ послСднюю подстановку Π² строкС (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ)
1,$v/re/cmds
Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
ed cmds
для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки, Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ
re
1,$w file
Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ строки Π² Ρ„Π°ΠΉΠ»;
W
добавляСт (строки ΠΊ Ρ„Π°ΠΉΠ»Ρƒ) вмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ (ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ»)
X
Π’ΠΎΠΉΡ‚ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ (ΠΈΠ»ΠΈ
ed -Ρ…
имя_Ρ„Π°ΠΉΠ»Π°)
$=
ΠŸΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ строки
! cmdline
Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ UNIX
cmdline
(.+1) newline
ΠŸΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ строку