Команда ed в linux

Обновлено: 07.07.2024

Редактор ed - очень простой интерактивный текстовый редактор, включенный в спецификацию стандарта POSIX. Этот редактор должен присутствовать в любой Unix подобной ОС, в том числе Linux. Фактически это так и есть, но некоторые реализациях могут отклоняться от стандарта. Например, busybox в эмуляторе Unix'а MobaXterm выдает приглашение на ввод команд и лишён поддержки регулярных выражений.

Набор команд ed используется в потоковом редакторе sed, а так же в популярном редакторе vim (там они доступны после ввода управляющего символа ':' ).

Редактор ed не имеет пользовательского интерфейса и не выводит на экран текст редактируемого файла. Это позволяет работать с редактором ed на очень медленных линиях связи и при плохом отклике системы (например при чрезмерной нагрузке).

При старте редактор ed считывает редактируемый файл в буфер в оперативной памяти и выполняет все операции с этим буфером. Буфер сохраняется в файл только после явного вызова команды записи. Такой способ редактирования отличает редактор ed от потокового редактора sed и не позволяет работать в ed с большими файлами.

Если указано имя файла, то при старте выдаётся число прочитанных байт. В классической реализации приглашение на ввод не выдается, а вывод числа байтов можно подавить опцией '-'. В MobaXterm выдается приглашение ':', а любые опции игнорируются.

Запуск

По умолчанию, результат обработки выдаётся на стандартный вывод.

  • -i[ext] - редактирование файлов "на месте". Каждый файл обрабатывается отдельно. Результат сохраняется в тот же файл. Старое содержимое сохраняется в файле, к имени которого приписана строка ext.
  • -n - отмена автопечати обработанных строк. Для вывода строк необходимо явно указывать в скрипте команду p или аналогичную.
  • -e cmd - задание скрипта cmd в командной строке
  • -s cmdfile - чтение скрипта из файла cmdfile
  • file1 file2. - список входных файлов. При его отсутствии обрабатывается стандартный ввод.

Формат команд

Адреса определяют строки, к которым должна быть применена команда. Если адрес не указан, то команда применяется ко всем строкам. Если указаны два адреса, то команда применяется ко всем строкам от addr1 до addr2 включительно. Адреса могут быть номерами строк (в том числе символ $ в качестве номера последней строки), регулярными выражениями в формате /re/ или \%re% (в этом случае % может быть заменён на любой символ). Запись addr! означает, что команду надо применять ко всем адресам, кроме указанного.

Команда кодируется одним символом. Опции зависят от типа выполняемой команды. Чтобы применить к одному адресу несколько команд, они могут быть сгруппированы с помощью фигурных скобок.

В файле отдельные команды могут располагаться в отдельных строках. При запуске однострочных программ команды отделяются точкой с запятой или передаются в виде последовательности опций -e 'cmd'

Основной цикл

Редактор sed оперирует тремя объектами: входной поток строк, буфер строк (pattern space), буфер хранения (hold space), выходной поток. ( pattern space также переводят как "пространство регулярных выражений")

В цикле производятся следующие действия:

  • строка из входного потока читается в буфер строк. Из строки удаляется символ перевода строки;
  • к буферу строк последовательно применяются все команды с подходящими адресами (в том числе команды обмена между буфером строк и буфером хранения);
  • если не отключена автопечать, то содержимое буфера строк выводится в выходной поток. Туда же дописывается перевод строки;
  • буфер строк очищается и цикл повторяется.

Команды управления главным циклом

Команды изменения строк

Вставка/замена/удаление строк

Команды управления буферами

Если буфер хранения пуст, то команда G добавляет в буфер строк только перевод строки.

Печать

Опция -n отключает автоматический вывод результата в выходной поток. В этом случае команды печати надо указывать явно.

Команды работы с файлами

Метки и ветвления

Структура команд

Большинство команд ed имеют вид:

Где addr - адреса строк, к которым надо применить команду, C - односимвольная команда, args - дополнительные аргументы команды. Адрес addr может отсутствовать, указывать на одну строку или на диапазон строк. По умолчанию, команды редактирования применяется к текущей строке, а файловые команды ко всему буферу.

Адреса

Адреса задаются следующими способами:

По номерам (n обозначает число), как результат поиска регулярного выражения, как смещение относительно известного адреса или как диапазон от адреса до адреса:

  • n - номер строки. 0 означает строку перед первой;
  • $ - последняя строка в буфере;
  • . - текущая строка. На старте устанавливается в $;
  • /RE/ - первая строка соответствующая регулярному выражению RE. Поиск идёт вниз по тексту Если RE не найдено до конца, то поиск продолжается по кругу с начала. В sed - все строки соответствующие выражению RE.
  • ?RE? - то же, что и /RE/. но поиск идёт вверх по тексту . Не актуально для sed.
  • addr+n или addr-n - смещение относительно адреса, например, /RE/+2 или $-3 (четвертая строка с конца);
  • addr1,addr2 - диапазон от и до включительно;
  • [addr1,addr2]g/RE/ - все строки в диапазоне addr1-addr2, соответствующие регулярному выражению RE;
  • [addr1,addr2]v/RE/ - все строки в диапазоне addr1-addr2, не соответствующие регулярному выражению RE;
  • 'C - строка, помеченная символом C. Метка устанавливается командой [addr]kC .

Диапазон может указываться через точку с запятой. В этом случае если адрес addr2 задан в виде поиска регулярного выражения, то при использовании запятой поиск ведётся от строки, следующей за текущей строкой, а при использовании точки с запятой - от строки, следующей за адресом addr1.

Команды

  • q - завершить работу
  • Q - забыть изменения и завершить работу
  • u - отменить изменения, сделанные последней командой редактирования
  • f file - задать текущее имя файла. Удобно если ed запускался без указания имени файла.
  • [addr]r file - вставить содержимое файла после адреса. По умолчанию в конец буфера. r !cmd - выполнить шелловскую команду и вставить её вывод
  • e file - удалить содержимое буфера и начать редактировать новый файл. e !cmd - аналогично r !cmd
  • [addr1,addr2]w[ file] - записать буфер в файл (можно указать новое имя)
  • [addr]a - вставить строки после указанной
  • [addr]i - вставить строки перед указанной
  • [addr1,addr2]с - удалить строки из диапазона и вставить вместо них новые

В командах вставки признаком конца ввода является строка состоящая из одного символа точки и перевода строки. Для ввода одной точки в строке вводятся две точки.

НАЗВАНИЕ
ed - текстовый редактор

ОПИСАНИЕ
Текстовый редактор ed является стандартным для UNIX систем. Если в командной строке задан файл, он считывается в буфер (как будто была выполнена команда e, см. ниже) и его можно редактировать.

Редактор ed работает с копией файла; изменения, производимые над копией, отображаются на файл только после выполнения команды записи w. Копия текста размещается редактором во временном файле, называемом буфером. Буфер только один.

Редактор поддерживает спецификацию формата текстового файла. Если первая строка редактируемого файла содержит спецификацию формата, а у терминала, с которого вызван ed, задана характеристика -tabs или tab3 [см. man stty], то при просмотре файла нужные позиции табуляции будут установлены автоматически. Например, если в первой строке файла содержится: то позиции табуляции будут установлены в колонках 5, 10, 15, а максимальная длина строки составит 72. Отметим, что при вводе текста, независимо от спецификации формата, происходит замена символов табуляции пробелами до ближайшей колонки, кратной восьми.

Команды ed имеют простую и регулярную структуру: ноль, один или два адреса предшествуют односимвольной команде, после которой могут располагаться ее аргументы. Адреса задают одну или несколько строк из буфера. Отметим, что каждая команда, требующая адресации, может адресоваться по умолчанию, то есть адреса указывать не обязательно.

Как правило, в строке может содержаться только одна команда. Ряд команд позволяет вводить текст, который размещается в определенном месте буфера. Когда редактор находится в режиме ввода, никакие команды не воспринимаются; вводимая информация только накапливается. Строка, состоящая из одного символа ".", обозначает конец ввода.

Редактор ed поддерживает ограниченную форму записи регулярных выражений; регулярное выражение используется для задания адресов строк и, в некоторых командах (например, s) для указания заменяемых фрагментов строк. Регулярное выражение (РВ) определяет множество цепочек символов. Говорят, что элемент множества цепочек удовлетворяет РВ. РВ для ed может быть построено следующим образом.

Следующие односимвольные РВ сопоставляются с цепочками из одного символа:

1.1 Обычный символ (не входящий в перечень из пункта 1.2, см. ниже) - это односимвольное РВ, которое успешно сопоставляется с указанным символом.

1.2 Если за символом \ следует любой специальный символ, то этот последний символ теряет свой специальный смысл. Данная комбинация определяет односимвольное РВ, успешно сопоставляющееся со специальным символом. Специальными символами являются: . * [ \ Эти символы имеют специальный смысл, за исключением случая, когда они заключены в квадратные скобки (см ниже 1.4).

^ Символ имеет специальный смысл в начале всего РВ (см. ниже 3.1) или в квадратных скобках сразу после открывающей скобки (см. 1.4).

$ Символ имеет специальный смысл в конце всего РВ (см. ниже 3.2).

разделители РВ Символы, использующиеся для ограничения (разделители) целого РВ, являются специальными для этого РВ (например, символ / в команде g).

1.3 Точка (.) - односимвольное РВ, успешно сопоставляющееся с любым символом, кроме перевода строки.

1.4 Непустая цепочка символов, заключенная в квадратные скобки [ ] - односимвольное РВ, которое успешно сопоставляется с любым символом из этой цепочки. Если цепочка начинается с символа ^, то РВ успешно сопоставляется с любым символом, не входящим в этот набор и отличающимся от перевода строки. Если символ ^ располагается не в начале цепочки, он теряет свой специальный смысл. Диапазон символов можно задать с помощью знака -. Например, РВ 3 эквивалентно [0123456789]. Минус теряет свой специальный смысл, если он стоит в начале (быть может, после ^) или в конце цепочки символов. Закрывающая квадратная скобка не рассматривается как окончание цепочки символов, если она стоит в начале (быть может, после ^). Таким образом, РВ []a-f] определяет либо закрывающую квадратную скобку, либо любой символ от a до f включительно. Внутри квадратных скобок символы, перечисленные в 1.2, теряют свой специальный смысл.

Для построения РВ из односимвольных РВ могут быть использованы следующие правила:

2.1 Односимвольное РВ есть РВ, успешно сопоставляющееся по правилам, описанным выше.

2.2 Односимвольное РВ с последующим символом * есть РВ, успешно сопоставляющееся с любым (в том числе и нулевым) числом вхождений односимвольного РВ. При наличии альтернатив выбирается самая длинная из начинающихся как можно левее успешно сопоставленных цепочек символов.

2.3 Односимвольное РВ, после которого следуют конструкции \, \ или \, есть РВ, успешно сопоставляющееся с определенным числом вхождений односимвольного РВ. Значения m и n должны быть неотрицательными целыми, меньшими 256; \ означает ровно m вхождений; \ - по крайней мере m вхождений; \ - любое число вхождений от m до n включительно.

2.4 Конкатенация нескольких РВ есть РВ, которое успешно сопоставляется с конкатенацией цепочек символов, каждая из которых успешно сопоставлена с отдельным РВ.

2.5 РВ, заключенное между конструкциями \( и \), есть РВ, которое успешно сопоставляется с теми же цепочками символов, что и исходное.

2.6 Выражение \n успешно сопоставляется с той же цепочкой символов, что и (под)выражение, заключенное в экранированные скобки \( и \), и расположенное ранее в том же РВ. Здесь n - это цифра; соответствующее подвыражение начинается с n-го вхождения конструкции \( в РВ. Например, выражение ^\(.*\)\1$ успешно сопоставляется со строками, состоящими из двух одинаковых цепочек символов.

Наконец, на РВ можно наложить ограничение, чтобы сопоставленная цепочка символов примыкала к одному или обоим концам строки:

3.1 Если перед РВ стоит символ ^, то сопоставление должно выполняться с начала строки.

3.2 Если после РВ стоит символ $, то сопоставление должно выполняться до конца строки.

Конструкция ^РВ$ задает шаблон целой строки.

Пустое РВ (//) эквивалентно последнему обработанному РВ.

  1. Символ . обозначает текущую строку.
  2. Символ $ обозначает последнюю строку буфера.
  3. Десятичное число n обозначает n-ую строку буфера.
  4. Пара символов 'x адресует строку, помеченную маркером x. Маркер - это малая буква, ставится с помощью команды k (см. ниже).
  5. РВ, заключенное между символами /, адресует первую из строк, успешно сопоставленных с РВ при движении вперед. Процесс сопоставления начинается со строки, следующей за текущей. Если до конца буфера подходящей строки не нашлось, сопоставление продолжается с начала буфера до текущей строки включительно, то есть просматривается весь буфер.
  6. Конструкция ?РВ? аналогична предыдущей, только просмотр выполняется в обратном направлении, начиная со строки, расположенной перед текущей.
  7. Если за адресом следует знак + или -, и далее стоит десятичное число, то адрес увеличивается (или уменьшается) на указанное число строк. Знак + можно опускать.
  8. Если адрес начинается с + или -, то смещение производится относительно текущей строки; так, адрес -5 эквивалентен .-5.
  9. Если адрес оканчивается на + или -, то к адресу прибавляется (из него вычитается) 1. Согласно этому и предыдущему правилу адрес из одного символа - соответствует строке, расположенной перед текущей. (В более ранних версиях редактора ту же роль играл символ ^). Более того, последовательности знаков + или - в конце адреса обладают эффектом накопления. Так, -- соответствует адресу текущей строки, уменьшенному на 2.
  10. Запятая обозначает пару адресов 1,$, а точка с запятой - пару адресов .,$.

Команды могут требовать ноль, один или два адреса. Адреса указываются перед командами. Задание адресов для команды, их не требующей, считается ошибкой. Если задано меньше адресов, чем нужно, используются подразумеваемые значения. Если адресов больше, чем нужно, используются последние.

Обычно адреса отделяются друг от друга запятой. Адреса могут разделяться и точкой с запятой. В этом случае текущая строка (.) становится первым адресом, и только тогда вычисляется второй, что можно использовать при поиске вперед и назад (см. выше правила 5 и 6). Второй адрес всегда должен быть больше первого (в соответствии с нумерацией строк буфера).

В следующем ниже списке команд редактора ed в скобках указаны подразумеваемые адреса. Разумеется, сами скобки не являются частью адреса.

Символ &, входящий в заменяющую_цепочку, заменяется на цепочку, сопоставленную с РВ в текущей строке. Специальное значение символа & можно отменить, используя \. Имеется и более общая возможность: конструкция \n, где n - цифра, заменяется на цепочку, сопоставленную в текущей строке с РВ, заключенным между n-й открывающей скобкой \( и соответствующей закрывающей скобкой \). Если заменяющая_цепочка состоит из одного символа %, то под этим подразумевается заменяющая_цепочка, использованная в предыдущей команде замены. Символ % теряет специальное значение, если в заменяющей_цепочке он не один, или если перед ним стоит символ \.

Строку можно разрезать, вставив в нее символ перевода строки. В заменяющей_цепочке переводу строки должен предшествовать символ \. Такая замена не допускается в рамках команд g и v. Эта команда аналогична команде m, только выполняет не перемещение, а копирование адресуемых строк и вставку их после строки с адресом a (который может равняться 0). Текущей становится последняя строка копии. Отмена (откатка) последнего изменения содержимого буфера, вызванного командами a, c, d, g, i, j, m, r, s, t, v, G или V. Эта команда аналогична глобальной команде g и отличается лишь тем, что список_команд выполняется только для строк, не удовлетворяющих РВ. Эта команда аналогична интерактивной глобальной команде G и отличается лишь тем, что на первом этапе ищутся строки, не удовлетворяющие РВ. Команда записи адресуемых строк в указанный файл. Если файл не существует, то он создается с режимом доступа 666 (доступен всем на чтение и запись), если только маска создания файлов [см. man umask] не изменяет этот режим. Текущее имя файла не изменяется, если до этого оно было каким-либо способом установлено. Если файл не указан, используется текущее имя файла (см. команды e и f). Текущей остается прежняя строка. Если команда завершается успешно, выводится количество записанных символов. Если вместо файла указан символ !, остаток строки рассматривается как команда shell'а, стандартным вводом которой являются адресуемые строки. Подобная команда не изменяет текущее имя файла. Распечатывается номер адресуемой строки. Текущей остается прежняя строка. Строка после ! рассматривается как команда shell'а. Если в этой строке встречается неэкранированный символ %, он заменяется на текущее имя файла. Если символ ! является первым символом команды, он заменяется текстом предыдущей команды. Так, комбинация !! приведет к повторному выполнению предыдущей команды. Если в команду производилась любая из двух перечисленных подстановок, распечатывается окончательный текст команды. Текущей остается прежняя строка. "Команда", состоящая только из адреса, вызывает печать адресуемой строки, которая становится текущей. Пустая команда, состоящая только из символа перевода строки, эквивалентна конструкции .+1p; она полезна для продвижения по буферу.

Некоторые ограничения на размеры: не более 512 символов в строке, не более 256 символов в списке_команд при глобальных действиях и не более 64 символов в именах файлов. Ограничение на количество строк зависит от размеров доступной памяти; каждая строка требует дополнительно 1 (полу)слово.

При чтении файла ed отбрасывает нулевые байты.

Если завершающий разделитель для РВ или заменяющей_цепочки непосредственно предшествует переводу строки, то такой разделитель может быть опущен. В этом случае распечатывается содержимое адресуемой строки. Следующие пары команд эквивалентны:

СМ. ТАКЖЕ
man stty, man umask, vi.

ДИАГНОСТИКА

Если, при наличии несохраненных изменений, делается попытка разрушить содержимое буфера командой e или q, ed выдает предупреждение (?) и позволяет продолжить редактирование. В этот момент повторная команда e или q возымеет действие. Опция командной строки -s отменяет проверку наличия изменений.

СЮРПРИЗЫ
Команда ! не должна появляться в списке_команд g и v.

Последовательность \n в РВ не рассматривается как символ перевода строки.

Если стандартный ввод редактора назначен не на терминал, ed завершится после первой же ошибки.

ed, red - текстовый редактор

СИНТАКСИС

ed [-s] [-p строка] [-x] [-C] [файл]
red [-s] [-p строка] [-x] [-C] [файл]

ОПИСАНИЕ

ed - это стандартный текстовый редактор. Если указан аргумент файл, ed применяет к нему команду e (см. ниже); т.е. файл считывается в буфер ed, чтобы его можно было редактировать. Как ed, так и red обрабатывают символы дополнительного набора (supplementary code set characters) в файле и распознают их в строке приглашения, указанной в опции -p (см. ниже), в соответствии с локалью, указанной в переменной среды LC_CTYPE (см. LANG в environ(5)). В регулярных выражениях поиск шаблонов осуществляется над символами, а не над байтами, как описано ниже.

ed работает с копией редактируемого файла; сделанные в копии изменения не влияют на файл, пока не будет дана команда w (запись). Копия редактируемого текста находится во временном файле, который называется буфером. Имеется только один буфер.

ed и red поддерживают возможность форматирования fspec. Если включить строку спецификации формата в качестве первой строки файла и вызвать ed с терминала, работающего в режиме stty -tabs или stty tab3, заданные шаги табуляции будут автоматически использоваться при сканировании файла. Например, если первая строка файла содержала:
табуляции будут установлены в столбцах 5, 10 и 15, и максимальная длина строки будет предполагаться равной 72 символам. ПРИМЕЧАНИЕ: при вводе текста в файл этот формат не действует; вместо этого, поскольку терминал работает в режиме stty -tabs или stty tab3, табуляции устанавливаются в каждом восьмом столбце.

Команды редактора ed имеют простую и регулярную структуру: ноль, один или два адреса, за которыми идет односимвольная команда, после которой могут быть указаны параметры команды. Эти адреса указывают одну или несколько строк буфера. Каждая команда, требующая указания адреса, имеет адреса по умолчанию, поэтому очень часто адреса можно не указывать.

В общем случае, в строке можно задавать только одну команду. Некоторые команды разрешают вводить текст. Этот текст помещается в соответствующее место в буфере. Когда ed воспринимает текст, говорят, что он находится в режиме ввода. В этом режиме команды не распознаются; все введенные символы просто накапливаются. Чтобы выйти из режима ввода, введите точку (.) в начале строки и сразу же нажмите клавишу Enter.

ed поддерживает ограниченную форму записи регулярных выражений (regular expressions); регулярные выражения используются в адресах для указания строк и в некоторых командах (например, s) для задания частей строки, подлежащих замене. Регулярное выражение задает множество символьных строк. Говорят, что элемент этого множества строк сопоставляется с регулярным выражением. (Полная информация о регулярных выражениях представлена на странице справочного руководства grep(1).)

Чтобы понять адресацию в ed, необходимо помнить, что в любой момент имеется текущая строка. В общем случае, текущая строка - это последняя строка, затронутая командой; конкретное влияние на текущую строку указывается в описании каждой команды. Адреса строятся следующим образом:

  1. Символ . указывает на текущую строку.
  2. Символ $ указывает на последнюю строку в буфере.
  3. Десятичное число n указывает на n-ную строку в буфере.
  4. 'x указывает на строку, помеченную символом x, который должен быть символом нижнего регистра (a-z). Строки помечаются с помощью команды k, которая описана ниже.
  5. Регулярное выражение в косых чертах (/) указывает на первую строку, найденную при поиске вперед от текущей строки до конца буфера и сопоставляющуюся с этим регулярным выражением. При необходимости, поиск продолжается с начала буфера включительно до текущей строки, так что просматривается весь буфер. См. также последний абзац раздела "ОПИСАНИЕ" ниже.
  6. Регулярное выражение в знаках вопроса (?) указывает на первую строку, найденную при поиске назад от текущей строки до конца буфера и сопоставляющуюся с этим регулярным выражением. При необходимости, поиск продолжается с конца буфера включительно до текущей строки, так что просматривается весь буфер. См. также последний абзац раздела "ОПИСАНИЕ" ниже.
  7. Адрес, за которым идет знак плюс (+) или знак минус (-), за которым идет десятичное число, указывает на этот адрес плюс (соответственно, минус) указанное число строк. В качестве сокращения для .+5 можно использовать .5.
  8. Если адрес начинается с + или -, добавление или вычитание осуществляется по отношению к данной строке; например, , -5 означает .-5.
  9. Если адрес заканчивается знаком + или -, то к адресу добавляется 1 или от адреса отнимается 1, соответственно. Вследствие этого правила и Правила 8 выше, адрес - указывает на строку, предшествующую текущей. (Чтобы сохранить совместимость с более ранними версиями редактора, символ ^ в контексте адреса полностью эквивалентен -.) Более того, хвостовые символы + и - имеют кумулятивный эффект, так что -- указывает на текущую строку минус 2.
  10. Для удобства, запятая (,) соответствует паре адресов 1,$, а точка с запятой (;) - паре .,$.

Команды могут требовать ноль, один или два адреса. Для команд, не требующих адреса, указание адреса считается ошибкой. Команды, воспринимающие один или два адреса, используют адреса по умолчанию вместо недостающих адресов; если задано больше адресов, чем требуется такой команде, используются последние из указанных.

Обычно, адреса разделяются запятой (,). Они также могут разделяться точкой с запятой (;). В последнем случае вычисляется первый адрес, текущая строка (.) устанавливается в это значение, а затем вычисляется второй адрес. Эту возможность можно использовать для определения начальной строки при поисках вперед и назад (см. Правила 5 и 6 выше). Второй адрес в любой паре адресов должен соответствовать строке в буфере, идущей после строки, соответствующей первому адресу.

В следующем списке команд ed скобки перед командой не являются частью адреса; они просто показывают адрес(а) по умолчанию для этой команды.

Аргументы файл команд e, E, f, r, w и W подлежат расширению как шаблоны имен файлов в sh(1). Они должны отделяться от буквы, задающей команду, одним или несколькими пробелами или символами табуляции.

В общем случае недопустимо указание в строке более одной команды. Однако, после любой команды (кроме e, f, r и w) можно указать суффикс l, n или p, при этом, соответственно, будет выдана, выдана с номером или напечатана текущая строка, как описано ниже для команд l, n и p.

Например, $r !ls добавляет текущий каталог к концу редактируемого файла. Такая команда shell не запоминается в качестве текущего имени файла.
(. )s/регулярное_выражение/замена/
или (. )s/регулярное_выражение/замена/g
или (. )s/регулярное_выражение/замена/n n = 1-512 Команда подстановки (substitute) проверяет каждую указанную строку на вхождение указанного регулярного_выражения. В каждой строке, в которой найдено сопоставление, все (непересекающиеся) вхождения сопоставившихся подстрок заменяются на указанную замену, если после команды указан индикатор глобальной замены g. Если глобальный индикатор не указан, заменяется только первое вхождение сопоставившейся подстроки. Если после команды указано число n, только n-ное вхождение сопоставившейся подстроки заменяется в каждой указанной строке. Если ни в одной из указанных строк замену осуществить не удалось, это рассматривается как ошибка. Вместо / для ограничения регулярного_выражения и замены можно использовать любой символ, кроме пробела и новой строки; текущей строкой (.) становится последняя строка, в которой произошла замена. См. также последний абзац в разделе "ОПИСАНИЕ" ниже.

Амперсанд (&) в строке замены заменяется подстрокой, сопоставившейся с регулярным выражением в текущей строке. Специальную интерпретацию символа & в этом контексте можно отменить, предварив его символом \. В качестве более общего свойства, символы \n, где n - цифра, заменяются на текст, сопоставившийся с n- ным подвыражением указанного регулярного_выражения, находящимся между \( и \). В случае вложенных подвыражений в круглых скобках, n определяется путем подсчета вхождений \(, начиная слева. Если символ % является единственным символом в замене, в качестве замены в текущей команде подстановки используется замена из последней выполненной команды подстановки. Символ % теряет свое специальное значение, если в строке замены есть и другие символы или когда перед ним стоит \.

Строку можно разбить на несколько, подставляя в нее символы новой строки. Символ новой строк в замене должен быть замаскирован путем ввода перед ним обратной косой (\). Такая подстановка недопустима как часть списка_команд в командах g и v. (. )ta Эта команда работает так же, как команда m, но после адреса a (который может быть 0) помещается копия указанных строк; текущей строкой (.) становится последняя скопированная строка. u Команда отмены (undo) отменяет действие последней команды, изменившей что-либо в буфере, а именно последней из команд a, c, d, g, i, j, m, r, s, t, v, G или V. (1,$)v/регулярное_выражение/список_команд Эта команда аналогична глобальной команде g, но на первом шаге помечаются строки, не сопоставившиеся с регулярным_выражением. (1,$)V/регулярное_выражение/ Эта команда аналогична интерактивной глобальной команде G, но на первом шаге помечаются строки, не сопоставившиеся с регулярным_выражением. (1,$)w файл Команда записи (write) записывает указанные строки в файл. Если файл не существует, он создается с режимом 666 (доступен на чтение и запись для всех), если только маска создания файла не требует другого режима; см. описание специальной команды umask в sh(1). Текущее запомненное имя файла не изменяется, если только файл - не первое имя файла, указанное с момента вызова ed. Если файл не указан, используется текущее запомненное имя файла, если оно есть (см. команды e и f); текущая строка (.) не изменяется. Если команда выполнена успешно, выдается количество записанных символов. Если вместо файла указать !, остаток строки рассматривается как команда интерпретатора shell, стандартным входным потоком для которой будут указанные строки. Такая команда shell не запоминается в качестве текущего имени файла. (1,$)W файл Эта команда аналогична описанной выше команде записи, за исключением того, что добавляет указанные строки в конец файла, если он существует. Если файл не существует, он создается, как описано выше для команды w. X Выдается приглашение ввести ключ, который используется в последующих командах e, r и w для дешифрования и шифрования текста с помощью алгоритма crypt(1). Редактор сам делает предположение о том, является ли текст, считанный командами e и r, зашифрованным. Пустой ключ отключает шифрование. См. также опцию -x командной строки ed. ($)!команда_shell Остаток строки после ! посылается командному интерпретатору системы UNIX для интерпретации в качестве команды. См. sh(1). В тексте этой команды незамаскированный символ % заменяется запомненным именем файла; если в качестве первого символа команды_shell указан !, он заменяется текстом предыдущей команды shell. Так что !! повторит последнюю выполненную команду shell. Если выполнялось любое расширение командной строки, выдается строка после расширения; текущая строка (.) не изменяется. (.+1) Адрес в строке без команды вызывает выдачу указанной строки. Просто новая строка, без адреса, эквивалентна команде .+1p; таким образом, нажатие клавиши Enter удобно использовать для прохода по буферу.

Если послан сигнал прерывания (ASCII DEL или BREAK), ed выдает ? и возвращается в режим ввода команд.

Некоторые ограничения размеров: не более LINE_MAX байтов в строке, 256 байтов в списке команд глобальной команды и PATH_MAX байтов в полных именах файлов (включая символы косой черты). Параметры LINE_MAX и PATH_MAX определены в файле limits.h. Ограничение на количество строк зависит от объема памяти: каждая строка занимает одно слово.

При чтении файла ed игнорирует символы ASCII NUL.

Если закрывающий разделитель регулярного выражения или строки замены (например, /) будет последним символом перед новой строкой, этот ограничитель можно не вводить. При этом будет напечатана указанная строка. Следующие пары команд эквивалентны:

Ошибки

? Ошибка команды.
?файл Недопустимый файл. (Для получения детальных разъяснений используйте команды h и H).

Если в буфере были сделаны изменения после выполнения последней команды w, записавшей весь буфер, ed предупреждает пользователя при попытке уничтожить буфер ed с помощью команд e или q. Он выдает ? и позволяет продолжить редактирование. Повторная команда e или q после этого будет выполнена. Опция командной строки -s подавляет эту возможность.

Файлы

ССЫЛКИ

ПРИМЕЧАНИЯ

Опция -, хотя и продолжает поддерживаться, заменена в документации опцией -s, соответствующей стандарту синтаксиса команд (Command Syntax Standard - см. intro(1)).

Опции и команды шифрования поставляются в пакете утилит шифрования (Encryption Utilities), который доступен только в Соединенных Штатах.

Команда ! не может использоваться в глобальных командах g и v.

Команду ! и ! в качестве имени файла в командах e, r и w нельзя использовать, если редактор вызван из ограниченного командного интерпретатора (см. sh(1)).

Последовательность \n в регулярных выражениях не сопоставляется с символом новой строки.

Если входной поток редактора получается из командной строки (например,
ed файл Copyright 1994 Novell, Inc.
Copyright 2000 В. Кравчук, OpenXS Initiative, перевод на русский язык

При запуске редактора ed, выделяется специальная область внутренней памяти машины. Эта область называется буфером. При редактировании файла, его содержимое копируется в этот буфер и работа идет именно с ним. Замена оригинала производится только при сохранении изменений.

где file — это имя нового или уже существующего файла. Для завершения сеанса используется команда q (от quit)

Если изменения не были записаны в файл, ed предупредит об этом

Для подтверждения выхода без сохранения, введите команду q еще раз. Для сохранения результатов и выхода, нужно ввести две команды:

При вызове ed без аргумента file , создается новый буфер. Для добавления текста в буфер используется команда a (от append или add). После ее выполнения редактор переходит в режим ввода текста. Для выхода из режима ввода текста введите на пустой строке символ точки «.».

Чтобы посмотреть содержимое буфера, введите команду

1,$ задают диапазон строк, которые надо напечатать ( p от print): 1 — первая строка, $ — последняя строка. Чтобы вывести строки со 2 по 4 :

Для просмотра одной строки: первой, третьей и последней:

Для просмотра текущей строки

Чтобы узнать, какая строка текущая

Для записи содержимого буфера в файл используется команда w (от write). Выполнение этой команды приводит к копированию содержимого буфера в указанный файл, старое содержимое файла при этом удаляется.

В ответ ed сообщит количество записанных в файл символов (байт).

Для считывания содержимого файла в буфер используется команда e (от edit):

При этом в буфер загружен весь файл some-file.txt и на экране появится количество его символов. Если в буфере до этого уже была какая-либо информация, она уничтожается.

Если вы использовали команду e для считывания файла в буфер, то в команде w необязательно указывать имя файла. Редактор ed помнит имя файла, которое последним использовалось в команде e и команда w по умолчанию будет делать запись в этот файл. Таким образом, сеанс работы с редактором может быть таким:

Чтобы узнать имя файла, в который будет записан буфер (при указании команды w без параметра), можно использовать команду f (от file):

С помощью команды f можно также менять имя файла для записи содержимого буфера. Например, в результате выполнения команд:

в буфер будет загружен файл some-file.txt и затем команда f изменяет имя файла для команды w .

Бывают ситуации, когда нужно считать в буфер файл, не стирая имеющейся до этого в нем информации. Для этой цели подходит команда r (от read). К примеру, по команде:

файл some-file.txt считывается и добавляется в конец имеющейся в буфере информации.

Для удаления строк предназначена команда d (от delete). Ее действие подобно действию команды p за исключением того, что d удаляет строки вместо их вывода. Удалить вторую строку

Удалить строки, начиная с четвертой и по последнюю:

Команда перемещения m (move) позволяет переместить группу строк из одного места в буфере в другое. Например, поместить первые три строки в конец буфера:

Для поиска строки, содержащую какой-то текст, используйте команду

Можно использовать в шаблоне регулярные выражения.

  • . — любой одиночный символ
  • ^ — начало строки
  • $ — конец строки
  • * — 0 и более вхождений шаблона слева
  • […] — один из символов в скобках
  • [^…] — любой символ, кроме тех, что в скобках
  • \(…\) — группирует выражение и возвращает найденный текст
  • \ — от n до m вхождений шаблона слева

Для замены отдельных слов или букв в строке или группе строк используется команда s . Например, заменить во второй строке символы «вторая» на символы «третья»

Еще пример замены

Справочник основных команд Linux

Одним из коренных отличий семейства ОС Linux от ОС Windows является ведущая роль командной строки или терминала в администрировании системы. Для успешной работы с «Линукс» одного графического интерфейса недостаточно. Полноценное управление тут возможно только через терминал. А в работе с терминалом никак не обойтись без изучения основных команд Linux.

В Linux насчитывается несколько сотен основных команд и их модификаций. Они группируются по нескольким категориям. По расположению — могут быть утилитами командной строки или встроенной функцией командной оболочки. По частоте применения – используемыми постоянно, эпизодически и редко. По типам действий – от получения справки до управления файлами и процессами. Именно третья, функциональная составляющая и станет основой группировки утилит в этой статье.

В обзоре собраны все важнейшие команды Linux, которые могут пригодиться для администрирования ОС Linux. Статья рассчитана как на новичков, так и на продвинутых пользователей, уже знакомых с основным функционалом терминала. Эту своеобразную шпаргалку можно смело добавлять в закладки всем, кто хочет извлечь из «Линукс» максимум полезных свойств и повысить свою продуктивность в несколько раз.

Справочная информация / документация

(Manual). Показывает инструкцию к программам и командам Linux. Чтобы получить руководство для программы, наберите:

Для инструкции по команде, введите:

whatis

Выводит краткое описание программы. Пример:

whereis

Показывает полный путь к исполняемому файлу и другим файлам программы. Пример:

Вся необходимая информация о команде будет доступна, если набрать:

whoami

Ctrl + R

Права суперпользователя

Большое число базовых команд Linux, например, установка программ или создание файлов в корневой системе, требуют для исполнения права пользователя root или суперпользователя. Применение данного режима несёт серьёзные изменения для операционной системы, поэтому нужно точно понимать, как сработает запущенная команда.

Способы получить права root в Linux

О втором варианте расскажем подробнее.

(Super User Do). Позволяет исполнять команды с правами суперпользователя. Перед переходом в режим root администратора система выполнит запрос пароля и логина root. Пример:

sudo su

sudo gksudo

Максимальную производительность приложений Linux зависит от правильного подбора платформы для ОС. Мощный виртуальный сервер от Eternalhost обеспечит интернет-ресурсу стабильную работу и пространство для развития.

Управления файлами и каталогами

(List). С помощью этой утилиты можно посмотреть, что содержится в папке. Без указания конкретного пути показывает текущий каталог. Если путь указан, то переход совершиться в конечный его каталог. Чтобы вывести каталог в виде списка с дополнительной поясняющей информацией введите:

Для показа скрытых файлов:

(Concatenate / Catenate). Команда двойного назначения. Показывает на экране что содержит файл или стандартный ввод. Также к «склеивает» несколько переданных подряд файлов в один. Если нужно посмотреть содержимое одного файла, вводим:

Если нужно узнать содержимое нескольких файлов подряд:

Для «склейки» файлов, вводим:

Чтобы задать нужное количество строк в показанном:

(Change Directory). Меняет текущий каталог, в котором работает терминал на указанный. Когда терминал запущен, он использует по умолчанию корневой каталог (root), вернуться в который можно, набрав:

Чтобы указать другую папку для работы с файлами, нужно ввести:

Чтобы подняться по древу каталогов на уровень вверх набираем:

Чтобы вернуться к предыдущей директории:

Двойной амперсанд – не полноценная команда, а управляющий оператор. Он предназначен для выполнения последовательного ряда команд. Чтобы терминал выполнил команды одну за другой, нужно разделить их следующим образом:

mkdir

(Make Directory). Создаёт новую директорию. Можно также создать полную структуру подкаталогов, если ввести сочетание:

(Copy). Утилита, позволяющая скопировать файл или каталог. Копирование файлов и каталогов. Чтобы копирование прошло рекурсивно, т. е. включало все поддиректории и файлы в них, надо добавить к команде:

А если надо дополнить рекурсивное копирование сохранением всех атрибутов, сведения о владельце и временный штамп, добавляем «архивную» опцию -a, чтобы получилось:

(Remove). Отвечает за удаление папок и файлов. Использовать оператор rm следует крайне осторожно. В Linux файлы удаляются не в корзину, откуда их можно восстановить, а стираются безвозвратно. Для рекурсивного удаления используйте сочетание:

(Link). Создаёт программные ссылки на файлы. По функционалу это похоже на ярлыки в Windows.

Типы ссылок Linux

  • символические ( -s ) – указание на адрес файла ил папки без метаданных;
  • твёрдые или жёсткие ( -P ) – содержат сведения о физическом адресе на диске, где хранится файл.
    Удалить ссылку в Linux можно при помощи атрибута –f .

chmod

(Change Mode). Изменяет разрешения доступа к файлу. Под доступом имеется в виду классическая триада: чтение r, изменение w и запуск x. Общий вид:

Популярные комбинации разрешений для команды chmod

chown

(Change Owner). Команда для смены владельца файла и его группы. Для смены владельца используем синтаксис:

Для смены группы файла:

Если надо поменять оба параметра:

Команду можно применить только с правами суперпользователя. Чтобы изменить владельца/группу рекурсивно добавляем:

chgrp

(Disk Free). Даёт полную информацию о свободном пространстве на диске. Анализ включает перечисление файловых систем смонтированных разделов, обзор занятого и свободного места на диске. Для более удобного вывода информации, лучше применять сочетание:

Читайте также: