Строковый редактор ed
При запуске редактора ed, выделяется специальная область внутренней памяти машины. Эта область называется буфером. При редактировании файла, его содержимое копируется в этот буфер и работа идет именно с ним. Замена оригинала производится только при сохранении изменений.
Запуск редактора
ed
или
ed file
где file
— это имя нового или уже существующего файла. Для завершения сеанса используется команда q
(от quit)
q
Если изменения не были записаны в файл, ed предупредит об этом
?
Для подтверждения выхода без сохранения, введите команду q
еще раз. Для сохранения результатов и выхода, нужно ввести две команды:
w q
При вызове ed без аргумента file
, создается новый буфер. Для добавления текста в буфер используется команда a
(от append или add). После ее
выполнения редактор переходит в режим ввода текста. Для выхода из режима ввода текста введите на пустой строке символ точки «.».
a Первая строка текста Вторая строка текста Третья строка текста Четвертая строка текста Пятая строка текста .
Чтобы посмотреть содержимое буфера, введите команду
1,$p Первая строка текста Вторая строка текста Третья строка текста Четвертая строка текста Пятая строка текста
1,$
задают диапазон строк, которые надо напечатать (p
от print): 1
— первая строка, $
— последняя строка. Чтобы вывести строки со 2
по 4
:
2,4p Вторая строка текста Третья строка текста Четвертая строка текста
Для просмотра одной строки: первой, третьей и последней:
1p Первая строка текста 3p Третья строка текста $p Пятая строка текста
Для просмотра текущей строки
.p Четвертая строка текста
Чтобы узнать, какая строка текущая
.= 4
Для записи содержимого буфера в файл используется команда w
(от write). Выполнение этой команды приводит к копированию содержимого буфера в указанный файл, старое
содержимое файла при этом удаляется.
w example.txt
В ответ ed сообщит количество записанных в файл символов (байт).
Для считывания содержимого файла в буфер используется команда e
(от edit):
e some-file.txt
При этом в буфер загружен весь файл some-file.txt
и на экране появится количество его символов. Если в буфере до этого уже была какая-либо информация, она уничтожается.
Если вы использовали команду e
для считывания файла в буфер, то в команде w
необязательно указывать имя файла. Редактор ed помнит имя файла, которое последним
использовалось в команде e
и команда w
по умолчанию будет делать запись в этот файл. Таким образом, сеанс работы с редактором может быть таким:
ed e some-file.txt [процесс редактирования] w q
Чтобы узнать имя файла, в который будет записан буфер (при указании команды w
без параметра), можно использовать команду f
(от file):
f some-file.txt
С помощью команды f
можно также менять имя файла для записи содержимого буфера. Например, в результате выполнения команд:
ed some-file.txt f other-file.txt
в буфер будет загружен файл some-file.txt
и затем команда f
изменяет имя файла для команды w
.
Бывают ситуации, когда нужно считать в буфер файл, не стирая имеющейся до этого в нем информации. Для этой цели подходит команда r
(от read). К примеру, по команде:
r some-file.txt
файл some-file.txt
считывается и добавляется в конец имеющейся в буфере информации.
Для удаления строк предназначена команда d
(от delete). Ее действие подобно действию команды p
за исключением того, что d
удаляет строки вместо их вывода. Удалить вторую строку
2d
Удалить строки, начиная с четвертой и по последнюю:
4,$d
Команда перемещения m
(move) позволяет переместить группу строк из одного места в буфере в другое. Например, поместить первые три строки в конец буфера:
1,3m$
Для поиска строки, содержащую какой-то текст, используйте команду
/шаблон/
Можно использовать в шаблоне регулярные выражения.
.
— любой одиночный символ^
— начало строки$
— конец строки*
— 0 и более вхождений шаблона слева[…]
— один из символов в скобках[^…]
— любой символ, кроме тех, что в скобках\(…\)
— группирует выражение и возвращает найденный текст\{n,m\}
— от n до m вхождений шаблона слева
Для замены отдельных слов или букв в строке или группе строк используется команда s
. Например, заменить во второй строке символы «вторая» на символы «третья»
2s/вторая/третья/
Еще пример замены
1,$s/ашипка/ошибка/
чтобы исправить первое вхождение последовательности «ашипка» на «ошибка» в каждой строке буфера. Чтобы выполнить замену всех имеющихся вхождений, добавьте символ g
(от global):
1,$s/ашипка/ошибка/g
Полное описание редактора ed [pdf]