~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ B32FB78F304B554594A102FBF5044994__1716230820 ✰
Заголовок документа оригинал.:
✰ sed - Wikipedia ✰
Заголовок документа перевод.:
✰ СЭД — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Sed ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/b3/94/b32fb78f304b554594a102fbf5044994.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/b3/94/b32fb78f304b554594a102fbf5044994__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 10:45:06 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 20 May 2024, at 21:47 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

СЭД — Википедия Jump to content

но

Из Википедии, бесплатной энциклопедии
но
Парадигма сценарии
Разработано Ли Э. МакМахон
Впервые появился 1974 год ; 50 лет назад ( 1974 )
Язык реализации С
Под влиянием
Эд
Под влиянием
Перл , АВК

sed («редактор потока») — это утилита Unix , которая анализирует и преобразует текст, используя простой и компактный язык программирования. Он был разработан с 1973 по 1974 год Ли Э. МакМахоном из Bell Labs . [1] и сегодня доступен для большинства операционных систем. [2] sed был основан на функциях сценариев интерактивного редактора ed («редактор», 1971 г.) и более раннего qed («быстрый редактор», 1965–66 гг.). Это был один из первых инструментов для поддержки регулярных выражений , который до сих пор используется для обработки текста, особенно с помощью команды подстановки. Популярные альтернативные инструменты для манипулирования строками открытого текста и «потокового редактирования» включают AWK и Perl .

История [ править ]

Впервые появившись в версии 7 Unix , [3] sed — одна из первых команд Unix, созданная для обработки файлов данных в командной строке. Она возникла как естественный преемник популярной команды grep . [4] Первоначальной мотивацией был аналог grep (g/re/p) для замены, отсюда и «g/re/s». [3] Предвидя, что появятся и другие программы специального назначения для каждой команды, такие как g/re/d, МакМахон написал универсальный построчно-ориентированный потоковый редактор, который стал sed. [4] Синтаксис sed, в частности использование / для сопоставления с образцом и s/// для замены, созданной ed , предшественником sed, который широко использовался в то время, [4] а синтаксис регулярных выражений повлиял на другие языки, особенно ECMAScript и Perl . Позже был разработан более мощный язык AWK , который функционировал как двоюродный брат, позволяя выполнять мощную обработку текста с помощью сценариев оболочки . sed и AWK часто называют прародителями и вдохновителями Perl, они повлияли на синтаксис и семантику Perl, особенно на операторы сопоставления и замены.

В GNU sed добавлено несколько новых функций, включая на месте редактирование файлов . Super-sed — это расширенная версия sed, включающая регулярные выражения, совместимые с Perl . Другой вариант sed — minised , первоначально созданный методом реверс-инжиниринга из 4.1BSD, созданный Эриком С. Рэймондом и в настоящее время поддерживаемый Рене Ребе . minised использовался проектом GNU до тех пор, пока проект GNU не написал новую версию sed на основе новой библиотеки регулярных выражений GNU. Текущая мини-версия содержит некоторые расширения для BSD sed, но не так многофункциональна, как GNU sed. Его преимущество в том, что он очень быстрый и использует мало памяти. Он используется во встроенных системах и представляет собой версию sed, поставляемую с Minix . [5]

Режим работы [ править ]

sed — это утилита построчно-ориентированной обработки текста: она считывает текст построчно из входного потока или файла во внутренний буфер, называемый пространством шаблонов . Каждое чтение строки запускает цикл . К пространству шаблонов sed применяет одну или несколько операций, указанных в сценарии sed . sed реализует язык программирования , содержащий около 25 команд , определяющих операции с текстом. Для каждой входной строки после запуска сценария sed обычно выводит пространство шаблонов (строку, измененную сценарием) и снова начинает цикл со следующей строки. Другие варианты поведения в конце сценария доступны через параметры sed и команды сценария, например d чтобы удалить пространство шаблонов, q бросить курить, Nдля немедленного добавления следующей строки в пространство шаблонов и т. д. Таким образом, сценарий sed соответствует телу цикла, который перебирает строки потока, где сам цикл и переменная цикла (текущий номер строки) являются неявными и поддерживаются sed.

Сценарий sed можно указать в командной строке ( -e вариант) или читать из отдельного файла ( -fвариант). Команды в сценарии sed могут принимать необязательный адрес в виде номеров строк или регулярных выражений . Адрес определяет, когда выполняется команда. Например, 2d будет только запускать d (удалить) во второй строке ввода (печать всех строк, кроме второй), в то время как /^ /dудалит все строки, начинающиеся с пробела. Отдельный специальный буфер, пространство хранения , может использоваться несколькими командами sed для хранения и накопления текста между циклами. командный язык sed имеет только две переменные («пространство хранения» и «пространство шаблонов») и GOTO функциональность ветвления, подобную ; тем не менее, язык является Тьюринг-полным , [6] [7] и эзотерические sed-скрипты существуют для таких игр, как sokoban , arkanoid , [8] шахматы , [9] и тетрис . [10]

Основной цикл выполняется для каждой строки входного потока, оценивая сценарий sed в каждой строке входного потока. Каждая строка сценария sed представляет собой пару шаблон-действие, указывающую, какой шаблон сопоставить и какое действие выполнить, что можно преобразовать в условный оператор . Поскольку основной цикл, рабочие переменные (пространство шаблонов и пространство хранения), потоки ввода и вывода, а также действия по умолчанию (копирование строки в пространство шаблонов, печать пространства шаблонов) неявны, можно писать краткие однострочные программы . Например, программа sed, заданная:

10q
 

напечатает первые 10 строк ввода, а затем остановится.

Использование [ править ]

Команда замены [ править ]

В следующем примере показано типичное и наиболее распространенное использование sed: подстановка. Это использование действительно было первоначальной мотивацией для sed: [4]

sed   's/regexp/replacement/g'   имя_входного_файла   >   имя_выходного_файла
 

В некоторых версиях sed перед выражением должен стоять -eчтобы указать, что за ним следует выражение. s означает замену, а gозначает глобальный, что означает, что все соответствующие вхождения в строке будут заменены. Регулярное выражение (т. е. шаблон), по которому осуществляется поиск, помещается после первого символа-разделителя (здесь косая черта), а замена следует за вторым символом. Слэш ( /) — это общепринятый символ, происходящий от символа «поиск» в ed, но можно использовать любой другой, чтобы сделать синтаксис более читабельным, если он не встречается в шаблоне или замене; это полезно, чтобы избежать « синдрома наклоненной зубочистки ».

Команда подстановки, берущая начало в search-and-replace в ed, реализует простой синтаксический анализ и создание шаблонов . regexp обеспечивает как сопоставление с образцом, так и сохранение текста с помощью подвыражений, в то время как replacement может быть либо буквальным текстом, либо строкой формата, содержащей символы & для «всего совпадения» или специальных escape-последовательностей \1 через \9для n -го сохраненного подвыражения. Например, sed -r "s/(cat|dog)s?/\1s/g" заменяет все вхождения слов «cat» или «dog» на «cats» или «dogs», не дублируя существующую букву «s»: (cat|dog) является первым (и единственным) сохраненным подвыражением в регулярном выражении, и \1 в строке формата подставляет это в вывод.

Другие команды sed [ править ]

Помимо замены, возможны и другие формы простой обработки с использованием около 25 команд sed. Например, в следующем примере команда d используется для фильтрации строк, содержащих только пробелы или содержащие только символ конца строки:

sed   '/^ *$/d'   имя_входного_файла
 

В этом примере используются некоторые из следующих регулярных выражений метасимволов (sed поддерживает полный диапазон регулярных выражений):

  • Каре ( ^) соответствует началу строки.
  • доллара Знак ( $) соответствует концу строки.
  • Звездочка ( *) соответствует нулю или более вхождениям предыдущего символа.
  • Плюс ( +) соответствует одному или нескольким вхождениям предыдущего символа.
  • вопроса Знак ( ?) соответствует нулю или одному вхождению предыдущего символа.
  • Точка ( .) соответствует ровно одному символу.

Возможны сложные конструкции sed, позволяющие ему служить простым, но узкоспециализированным языком программирования . Например, потоком управления можно управлять с помощью метки ( двоеточие, за которым следует строка) и инструкции ветвления. b, а также условный переход t. Инструкция bза которым следует допустимое имя метки, обработка перейдет к команде, следующей за этой меткой. t инструкция сделает это только в том случае, если после предыдущей замены произошла успешная замена. t (или старт программы, в случае первого tстолкнулся). Кроме того, { Инструкция запускает подпоследовательность команд (вплоть до соответствующего }); в большинстве случаев это будет обусловлено шаблоном адреса.

sed используется как фильтр [ править ]

В Unix sed часто используется в качестве фильтра в конвейере :

$  генерировать данные   |    sed   's/x/y/g' 

То есть такая программа, как «generateData», генерирует данные, а затем sed вносит небольшое изменение, заменяя x на y . Например:

$  эхо   xyz   xyz   |    sed   's/x/y/g' 
 yyz yyz 

[примечания 1]

Сценарии sed на основе файлов [ править ]

Часто бывает полезно поместить несколько команд sed, по одной команде в строку, в файл сценария, например: subst.sed, а затем используйте -f возможность запуска команд (например, s/x/y/g) из файла:

sed   -f   subst.sed   имя_входного_файла   >   имя_выходного_файла
 

В файл сценария можно поместить любое количество команд, а использование файла сценария также позволяет избежать проблем с экранированием оболочки или подстановками.

Такой файл сценария можно сделать исполняемым непосредственно из командной строки, добавив к нему « строку shebang », содержащую команду sed, и назначив файлу разрешение на выполнение. Например, файл subst.sed может быть создан с содержимым:

#!/bin/sed -f 
 s  /  x  /  y  /  g 

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

chmod   u+x   subst.sed
 

Затем файл можно выполнить непосредственно из командной строки:

subst.sed   имя_входного_файла   >   имя_выходного_файла
 

Редактирование на месте [ править ]

The -iОпция, представленная в GNU sed, позволяет редактировать файлы на месте (фактически в фоновом режиме создается временный выходной файл, а затем исходный файл заменяется временным файлом). Например:

sed   -i   's/abc/def/'   имя_файла
 

Примеры [ править ]

Привет, мир! пример [ править ]

# конвертируем входной текстовый поток в "Hello, world!" 
  s  /.*/  Привет  ,  мир!   / 
 д 

Это «Привет, мир!» сценарий находится в файле (например, script.txt) и вызывается с помощью sed -f script.txt inputFileName, где «inputFileName» — входной текстовый файл. Скрипт меняет строку №1 «inputFileName» на «Hello, world!» а затем завершает работу, печатая результат перед завершением работы sed. Любые строки ввода после строки №1 не читаются и не печатаются. Таким образом, единственный вывод — «Привет, мир!».

В примере подчеркиваются многие ключевые характеристики sed:

  • Типичные программы sed довольно короткие и простые.
  • Сценарии sed могут иметь комментарии (строка, начинающаяся с # символ).
  • The s Команда (замена) — самая важная команда sed.
  • sed позволяет простое программирование с помощью таких команд, как q (покидать).
  • sed использует регулярные выражения, такие как .* (ноль или более любых символов).

Другие простые примеры [ править ]

Ниже приведены различные сценарии sed; их можно выполнить, передав в качестве аргумента sed, или поместить в отдельный файл и выполнить через -f или сделав сам скрипт исполняемым.

Чтобы заменить любой экземпляр определенного слова в файле на «УДАЛЕНО», например пароль IRC, и сохранить результат:

$  sed   -i   "s/вашпароль/УДАЛЕНО/"   ./status.chat.log
 

Чтобы удалить любую строку, содержащую слово «ваше слово» ( адрес — «/ваше слово/»):

/  твое слово  /   д 

Чтобы удалить все вхождения слова «ваше слово»:

с  /  ваше слово  //  г 

Чтобы удалить два слова из файла одновременно:

s  /  первое слово  //  g 
 s  /  второе слово  //  g 

Чтобы выразить предыдущий пример в одной строке, например, при вводе в командной строке, можно объединить две команды точкой с запятой:

$  sed   "s/firstword//g; s/ Secondword//g"   inputFileName
 

Пример многострочной обработки [ править ]

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

Это моя собака,
  которого зовут Фрэнк.
 Это моя рыба,
 которого зовут Джордж.
 Это моя коза,
  которого зовут Адам.
 

Приведенный ниже сценарий sed превратит приведенный выше текст в следующий текст. Обратите внимание, что скрипт влияет только на строки ввода, начинающиеся с пробела:

Это моя собака, которую зовут Фрэнк.
 Это моя рыба,
 которого зовут Джордж.
 Это мой козел, которого зовут Адам.
 

Сценарий:

 Н 
  s  /  \n  /   / 
  P 
  D 

Это объясняется так:

  • ( N) добавить следующую строку в пространство шаблонов;
  • ( s/\n / /) найти новую строку, за которой следует пробел, заменить одним пробелом;
  • ( P) напечатайте верхнюю строку пространства шаблонов;
  • ( D) удалите верхнюю строку из пространства шаблонов и снова запустите скрипт.

Это можно выразить в одной строке через точку с запятой:

но' N; s/\n / /; P; D' имя_входного_файла
 

Ограничения и альтернативы [ править ]

Несмотря на простоту и ограниченность, sed является достаточно мощным для большого количества целей. Для более сложной обработки более мощные языки, такие как AWK или Perl вместо этого используются . Они особенно используются при преобразовании строки более сложным способом, чем извлечение регулярного выражения и замена шаблона, хотя в принципе возможны сколь угодно сложные преобразования с использованием буфера хранения.

И наоборот, для более простых операций используются специализированные утилиты Unix, такие как grep (печать строк, соответствующих шаблону), head (печать первой части файла), Tail (печать последней части файла) и tr (перевод или удаление символов). зачастую предпочтительнее. Для решения конкретных задач такие специализированные утилиты обычно проще, понятнее и быстрее, чем более общее решение, такое как sed.

Команды и синтаксис ed/sed продолжают использоваться в дочерних программах, таких как текстовые редакторы vi и vim . Аналогом ed/sed является sam /ssam, где sam — редактор Plan 9 , а ssam — потоковый интерфейс к нему, обеспечивающий функциональность, аналогичную sed.

См. также [ править ]

Примечания [ править ]

  1. ^ При использовании командной строки кавычки вокруг выражения не обязательны и необходимы только в том случае, если в противном случае оболочка не интерпретировала бы выражение как одно слово (токен). Для сценария s/x/y/g нет никакой двусмысленности, поэтому generateData | sed s/x/y/gработает правильно. Однако кавычки обычно включаются для ясности и часто необходимы, особенно для пробелов (например, 's/x x/y y/'). Чаще всего используются одинарные кавычки, чтобы избежать интерпретаций оболочки. $как переменная оболочки. Используются двойные кавычки, например "s/$1/$2/g", чтобы позволить оболочке заменить аргумент командной строки или другую переменную оболочки.

Ссылки [ править ]

  1. ^ «Часто задаваемые вопросы по sed, раздел 2.1» . Архивировано из оригинала 27 июня 2018 г. Проверено 21 мая 2013 г.
  2. ^ «Часто задаваемые вопросы по sed, раздел 2.2» . Архивировано из оригинала 27 июня 2018 г. Проверено 21 мая 2013 г.
  3. ^ Перейти обратно: а б Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Лаборатории Белла. 139.
  4. ^ Перейти обратно: а б с д «О ранней истории и влиянии Unix» . Спустя некоторое время на замену возникла потребность в другой специальной программе — gres: g/re/s. Ли МакМэхон взялся написать ее и вскоре предвидел, что семейству не будет конца: г/ре/д, г/ре/а и т. д. По мере развития его концепции она стала сед…
  5. ^ Рэймонд, Эрик Стивен ; Ребе, Рене (3 марта 2017 г.). «tar-mirror/minized: меньшая, дешевая и быстрая реализация SED» . Гитхаб . Архивировано из оригинала 13 июня 2018 г. Проверено 20 мая 2024 г.
  6. ^ «Реализация машины Тьюринга как сценария Sed» . Архивировано из оригинала 20 февраля 2018 г. Проверено 24 апреля 2003 г.
  7. ^ "Тьюринг.сед" . Архивировано из оригинала 16 января 2018 г. Проверено 24 апреля 2003 г.
  8. ^ «Дом $SED — геймез» .
  9. ^ "bolknote/SedChess" . Гитхаб . Проверено 23 августа 2013 г.
  10. ^ «Sedtris, игра тетрис, написанная для sed» . Гитхаб . Проверено 3 октября 2016 г.

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: B32FB78F304B554594A102FBF5044994__1716230820
URL1:https://en.wikipedia.org/wiki/Sed
Заголовок, (Title) документа по адресу, URL1:
sed - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)