Файлы System/bin Android 12. Справочник.


  Все     Команда     Скрипт     Служба     Приложение  

sed
Потоковый редактор

Симлинк на: [ ToyBox ]

Тип файла: команда

[ ToyBox ]     [ ManLinux ]

Комментарии
Команда sed в Linux

Синтаксис команды:

$ sed опции -e команды файл

Параметры:

-n, --quiet - не выводить содержимое буфера шаблона в конце каждой итерации;
-e - команды, которые надо выполнить для редактирования;
-f - прочитать команды редактирования из файла;
-i - сделать резервную копию файла перед редактированием;
-l - указать свою длину строки;
-r - включить поддержку расширенного синтаксиса регулярных выражений;
-s - если передано несколько файлов, рассматривать их как отдельные потоки, а не как один длинный.


У утилиты есть два буфера, это активный буфер шаблона и дополнительный буфер. Оба изначально пусты. Программа выполняет заданные условия для каждой строки в переданном ей файле.

sed читает одну строку, удаляет из неё все завершающие символы и символы новой строки и помещает её в буфер шаблона.

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

Когда всё команды будут выполнены и не указана опция -n, содержимое буфера шаблона выводится в стандартный поток вывода перед этим добавляется обратно символ перевода строки. если он был удален. Затем запускается новая итерация цикла для следующей строки.

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

2. Адреса sed

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

  • номер - позволяет указать номер строки, в которой надо выполнять команду;

  • первая~шаг - команда будет выполняется для указанной в первой части сроки, а затем для всех с указанным шагом;

  • $ - последняя строка в файле;

  • /регулярное_выражение/ - любая строка, которая подходит по регулярному выражению. Модификатор l указывает, что регулярное выражение должно быть не чувствительным к регистру;

  • номер, номер - начиная от строки из первой части и заканчивая строкой из второй части;

  • номер, /регулярное_выражение/ - начиная от сроки из первой части и до сроки, которая будет соответствовать регулярному выражению;

  • номер, +количество - начиная от номера строки указанного в первой части и еще плюс количество строк после него;

  • номер, ~число - начиная от строки номер и до строки номер которой будет кратный числу.

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

    Если передан один адрес, команда будет выполнена только для строки по этому адресу. Также можно передать диапазон адресов. Тогда адреса разделяются запятой и команда будет выполнена для всех адресов диапазона.

    3. Синтаксис регулярных выражений

    Вы можете использовать такие же регулярные выражения, как и для Bash и популярных языков программирования.
    Основные операторы, которые поддерживают регулярные выражения sed Linux:

  • * - любой символ, любое количество;
  • \+ - как звездочка, только один символ или больше;
  • \? - нет или один символ;
  • \{i\} - любой символ в количестве i;
  • \{i,j\} - любой символ в количестве от i до j;
  • \{i,\} - любой символ в количестве от i и больше.

    4. Команды sed

  • # - комментарий, не выполняется;
  • q - завершает работу сценария;
  • d - удаляет буфер шаблона и запускает следующую итерацию цикла;
  • p - вывести содержимое буфера шаблона;
  • n - вывести содержимое буфера шаблона и прочитать в него следующую строку;
  • s/что_заменять/на_что_заменять/опции - замена символов, поддерживаются регулярные выражения;
  • y/символы/символы - позволяет заменить символы из первой части на соответствующие символы из второй части;
  • w - записать содержимое буфера шаблона в файл;
  • N - добавить перевод строки к буферу шаблона;
  • D - если буфер шаблона не содержит новую строку, удалить его содержимое и начать новую итерацию цикла, иначе удалить содержимое буфера до символа перевода строки и начать новую итерацию цикла с тем, что останется;
  • g - заменить содержимое буфера шаблона, содержимым дополнительного буфера;
  • G - добавить новую строку к содержимому буфера шаблона, затем добавить туда же содержимое дополнительного буфера.

    Утилите можно передать несколько команд, для этого их надо разделить точкой с запятой или использовать две опции -e.