Sed: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
imported>VitalikBot
м Обновление шаблона {{improve}}; langs: ang,ku,la,eo
 
imported>Lê Lợi (bot)
 
Строка 1: Строка 1:
= {{-ang-}} =
{{заголовок со строчной буквы}}
 
{{Карточка программы
=== Морфологические и синтаксические свойства ===
| название = sed
{{сущ ang n|слоги=|основа=|основа1=}}
| логотип = <!-- только имя файла -->
 
| снимок экрана = <!-- только имя файла -->
{{морфо|прист1=|корень1=|суфф1=|оконч=}}
| подпись =  
 
| автор =  
=== Произношение ===
| разработчик = <!-- либо разработчики -->
{{transcriptions|||}}
| тип =  
 
| интерфейс =  
=== Семантические свойства ===
| первый выпуск =  
{{илл|lang=ang|}}
| аппаратная платформа =  
 
| последняя версия = 4.8
==== Значение ====
| дата последней версии = [[15 января]] [[2020 год]]а
# {{помета.|ang}} [[семя]] {{пример|la laroƿ Moyses us aƿrat gif hƿelc broðer deod sie ⁊ forletes ðæt ƿif ⁊ suno ne letes ꝥte onfoe broðer his lafe ðæs ⁊ eftaƿeccað {{выдел|sed}} broðer his|перевод=Учитель! Моисей написал нам: «если у кого умрет брат и оставит жену, а детей не оставит, то брат его пусть возьмет жену его и восстановит {{выдел|семя}} брату своему».||Евангелие от Марка|часть=12:19||The Rushworth Gospels}}
| состояние =  
#
 
==== Синонимы ====
#
#
 
==== Антонимы ====
#
#
 
==== Гиперонимы ====
#
#
 
==== Гипонимы ====
#
#
 
=== Родственные слова ===
{{родств-блок
|умласк=
|имена-собственные=
|существительные=
|прилагательные=
|числительные=
|глаголы=
|наречия=
|полн=
}}
 
=== Этимология ===
Из {{этимология:|ang}}
 
=== Фразеологизмы и устойчивые сочетания ===
*
 
=== Библиография ===
*
 
{{unfinished|ang|p=1|m=1|e=1}}
 
{{Категория|язык=ang|||}}
{{длина слова|3|ang}}
 
= {{-es-}} =
 
=== Морфологические и синтаксические свойства ===
{{сущ es|слоги={{по-слогам|sed}}
}}
 
=== Произношение ===
{{transcriptions||}}
 
=== Семантические свойства ===
 
==== Значение ====
# {{Нужен перевод|es}} {{пример||перевод=}}
 
==== Синонимы ====
 
==== Антонимы ====
 
==== Гиперонимы ====
 
==== Гипонимы ====
 
=== Родственные слова ===
{{родств-блок||
|существительные=
|прилагательные=
|глаголы=
|наречия=
}}
 
=== Этимология ===
 
<!-- Служебное: -->
{{improve|es|морфо|транскрипция/мн|значение|синонимы|гиперонимы|этимология}}
{{Категория|язык=es|||}}
{{длина слова|3|es}}
 
= {{-ku-}} =
 
=== Морфологические и синтаксические свойства ===
{{числ ku |слоги=|основа=|основа1=}}
 
{{морфо|прист1=|корень1=|суфф1=|оконч=}}
 
=== Произношение ===
{{transcriptions|||}}
 
=== Семантические свойства ===
{{илл|lang=ku|}}
 
==== Значение ====
# {{помета.|ku}} [[сто]] {{пример||перевод=|автор=|титул=|дата=|перев=|дата издания=|источник=}}
#
 
==== Синонимы ====
#
#
 
==== Антонимы ====
#
#
 
==== Гиперонимы ====
#
#
 
==== Гипонимы ====
#
#
 
=== Родственные слова ===
{{родств-блок
|умласк=
|имена-собственные=
|существительные=
|прилагательные=
|числительные=
|глаголы=
|наречия=
|полн=
}}
 
=== Этимология ===
Из {{этимология:|ku}}
 
=== Фразеологизмы и устойчивые сочетания ===
*
 
=== Библиография ===
*
 
{{unfinished|ku|p=1|m=1|e=1}}
 
{{Категория|язык=ku|||}}
{{длина слова|3|ku}}
 
= {{-la-}} =
 
=== Морфологические и синтаксические свойства ===
{{conj la|sed}}
 
{{морфо|прист1=|корень1=|суфф1=|оконч=}}
 
=== Произношение ===
{{transcription|}}
 
=== Семантические свойства ===
 
==== Значение ====
# [[но]], [[однако]], [[а]] {{пример|Qui respondens dixit : Scriptum est : Non in solo pane vivit homo, {{выдел|sed}} in omni verbo, quod procedit de ore Dei.|перевод=Он же сказал ему в ответ: написано: «не хлебом одним будет жить человек, {{выдел|но}} всяким словом, исходящим из уст Божиих».||Евангелие от Матфея|часть=4:4||Вульгата}}
 
==== Синонимы ====
# —
 
==== Антонимы ====
# —
 
==== Гиперонимы ====
# —
 
=== Родственные слова ===
{{родств-блок
|умласк=
|уничиж=
|увелич=
|имена-собственные=
|существительные=
|прилагательные=
|числительные=
|местоимения=
|глаголы=
|наречия=
|предикативы=
|предлоги=
}}
}}
'''sed''' (от {{lang-en|'''S'''tream '''ED'''itor}}) — потоковый [[текстовый редактор]] (а также [[язык программирования]]), применяющий различные предопределённые текстовые преобразования к последовательному потоку текстовых данных.


=== Этимология ===
Первоначально был написан как [[UNIX]]-[[Утилиты|утилита]] Ли Макмэхоном ({{lang-en|Lee E. McMahon}}) из [[Bell Labs]] в [[1973]]—[[1974|74]] годах. Сейчас <tt>sed</tt> доступен фактически для любой [[операционная система|операционной системы]], поддерживающей работу с [[командная строка|командной строкой]].
Происходит от {{этимология:}}


=== Фразеологизмы и устойчивые сочетания ===
Sed является [[Полнота по Тьюрингу|Тьюринг-полным]] языком, так как на нём можно создать машину Тьюринга<ref>{{cite web
* [[sed etiam]] — [[но]] [[и]] (''сильное противопоставление'')
| title = Implementation of a Turing Machine as Sed Script
| url = http://sed.sourceforge.net/grabbag/scripts/turing.txt
| access-date = 2005-02-11
| archive-date = 2018-02-20
| archive-url = https://web.archive.org/web/20180220011912/http://sed.sourceforge.net/grabbag/scripts/turing.txt
| url-status = live
}}</ref><ref>{{cite web
| title = Turing.sed
| url = http://sed.sourceforge.net/grabbag/scripts/turing.sed
| access-date = 2005-02-11
| archive-date = 2018-01-16
| archive-url = https://web.archive.org/web/20180116201401/http://sed.sourceforge.net/grabbag/scripts/turing.sed
| url-status = live
}}</ref>.


<!-- Служебное: -->
== Описание ==
{{improve|la|морфо|транскрипция|семантика?|этимология}}
<tt>sed</tt> получает входной поток (обычно файл) построчно, редактирует каждую строку согласно правилам, определённым в sed-[[скрипт]]е с использованием простого языка <tt>sed</tt>, и затем выводит результат в выходной поток.
{{Категория|язык=la|||}}
{{длина слова|3|la}}


= {{-fro-}} =
<tt>sed</tt> часто называют неинтерактивным текстовым редактором. Он отличается от обычных текстовых редакторов «инвертированностью» по отношению к тексту и набору команд редактирования. Обычные текстовые редакторы вначале загружают весь текст документа, а затем применяют к нему команды по одной, в то время как sed вначале загружает в себя набор команд, а затем применяет весь набор команд к каждой строке текста. Так как одновременно в памяти находится только одна строка, sed может обработать произвольно большие текстовые файлы.


=== Морфологические и синтаксические свойства ===
Набор команд <tt>sed</tt> сделан по образцу редактора [[ed]], однако необходимо помнить о его инвертированности. Например, команда '''25d''' редактора <tt>ed</tt> означает «''идите к строке 25 и удалите её''», в то время как та же команда <tt>sed</tt> означает «''если это строка с номером 25, то удалите (не выводите) её''». Известное исключение — это команды копирования и перемещения, которые охватывают диапазон строк и таким образом не имеют прямых эквивалентов в <tt>sed</tt>. Вместо этого <tt>sed</tt> вводит дополнительный [[Буфер (информатика)|буфер]], названный «пространством захвата», и дополнительные команды для управления им. Например, команда «''скопировать строку 25 в строку 76''» ('''25t76''') в <tt>ed</tt> была бы закодирована как две отдельные команды ('''25h; 76g''') в <tt>sed</tt> для того, чтобы сохранить строку в пространстве захвата до тех пор, пока данные не будут извлечены.
{{сущ fro f|слоги={{по-слогам|sed}}}}


{{также|[[sied]], [[siet]], [[sié]]}}
Следующий пример демонстрирует типичное использование <tt>sed</tt>:


{{морфо|прист1=|корень1=|суфф1=|оконч=|частица=}}
<source lang="bash">
sed -e 's/oldstuff/newstuff/g' inputFileName > outputFileName
</source>
Здесь ''s'' — замена; ''g'' — глобально, что означает «''все вхождения искомого значения''». После первого прямого [[Косая черта|слеша]] расположено [[регулярное выражение]] для поиска, после второго — выражение для замены. Однако, помимо [[Косая черта|слеша]] может использоваться и другой символ. Так, например, выражения


=== Произношение ===
<source lang="bash">
{{transcriptions||}}
echo 123123| sed 's/1/5/g'
echo 123123| sed 's%1%5%g'
echo 123123| sed 's$1$5$g'
echo 123123| sed 's|1|5|g'
</source>
полностью равнозначны.


=== Семантические свойства ===
Команда замены (s///) является самой мощной и часто используемой командой <tt>sed</tt>. Перенаправление стандартного вывода «<code>> outputFileName</code>» можно опустить, тогда <tt>sed</tt> выведет результат на экран.


==== Значение ====
В [[Unix]] команда <tt>sed</tt> часто используется в виде [[Фильтр (информатика)|фильтра]] в [[Перенаправление (UNIX)#Конвейеры|конвейере]] (| или pipe):
# [[место]], [[расположение]] {{пример||перевод=}}
<source lang="bash">
# [[место жительства]], [[жилище]] {{пример||перевод=}}
generate_data | sed -e 's/x/y/'
</source>
Таким образом генерируются данные и передаются на конвейер, чтобы заменить ''x'' на ''y''.


==== Синонимы ====
Несколько команд могут быть объединены в одном файле (например, <code>subst.sed</code>) и затем применены в виде:
#
<source lang="bash">
#
sed -f subst.sed inputFileName > outputFileName
</source>


==== Антонимы ====
Или можно написать [[Сценарный язык|файла скрипта]], используя [[Шебанг (Unix)|шебанг]]. Например, создав исполняемый файл <code>subst.sed</code> с содержимым:
#  
<source lang=bash>
#
#!/bin/sed -f
s/x/y/g
</source>


==== Гиперонимы ====
Его можно выполнять непосредственно:
#
<source lang=bash>
#
subst.sed inputFileName > outputFileName
</source>


==== Гипонимы ====
Помимо замены, возможны и другие формы простой обработки. Например, следующий сценарий удаляет пустые строки или строки, которые содержат только пробелы:
#
<source lang="bash">
#
sed -e '/^\s*$/d' inputFileName
</source>


=== Родственные слова ===
Последний пример использовал часть регулярных выражений-метасимволов:
{{родств-блок
* ^ Соответствует началу строки
|умласк=
* $ Соответствует концу строки
|уничиж=
* . Соответствует любому единственному символу
|увелич=
* * Соответствует нулю или более повторений предшествующего символа
|имена-собственные=
* [ ] Соответствуют одному любому из символов, включённых в квадратные скобки между [ и ]
|существительные=
* [^ ] Соответствуют одному любому из символов, не включённых в квадратные скобки между [^ и ]
|прилагательные=
* \''буква'' соответствуют одному любому символу из определённого класса символов, в частности \s — это любой пробельный символ.
|числительные=
|местоимения=
|глаголы=
|наречия=
|предикативы=
|предлоги=
}}


=== Этимология ===
Комплексные конструкции <tt>sed</tt> возможны до такой степени, что он может быть представлен как высоко специализированный, хотя и простой, [[язык программирования]]. Потоком управления, например, можно управлять при помощи метки (двоеточие, за которым следует строка, которая должна быть именем метки) и инструкции ветвления '''b'''; инструкция '''b''', за которой следует правильное имя метки, переместит обработку в блок после метки; если метка не существует, тогда ветвление завершит сценарий ([[скрипт]]).
Происходит от {{этимология:|fro}}


=== Фразеологизмы и устойчивые сочетания ===
<tt>sed</tt> — это одна из наиболее ранних команд Unix, которые позволяли обрабатывать файлы данных из командной строки. <tt>sed</tt> развился как естественный преемник популярной команды [[grep]]. Родственный более позднему языку программирования [[AWK]], <tt>sed</tt> позволил применять в [[Оболочка операционной системы|shell]] [[скрипт]]ах мощную и интересную обработку данных, и был одним из первых инструментов Unix, действительно поощрявшим адекватно использовать регулярные выражения.<!--
*


=== Библиография ===
По скорости выполнения <tt>sed</tt> заметно быстрее, чем AWK.{{нет АИ|3|12|2010}}-->
*


{{improve|fro|морфо|транскрипция/мн|пример|синонимы|гиперонимы|этимология}}
<tt>sed</tt> и <tt>awk</tt> часто считаются прародителями и вдохновителями языка [[Perl]], и в особенности синтаксиса «<code>s///</code>» из примера выше.
{{Категория|язык=fro|||}}
{{длина слова|3|fro}}


= {{-eo-}} =
У языка <tt>sed</tt> нет переменных, есть только примитив [[GOTO]] и выполняющие ветвление функциональные возможности; тем не менее это [[Полнота по Тьюрингу|тьюринг-полный]] язык.


=== Морфологические и синтаксические свойства ===
[[GNU]] <tt>sed</tt> имеет несколько новых особенностей, например замещающая правка файлов (замена первоначального файла результатом работы <tt>sed</tt>). Замещающая правка часто используется вместо сценария <tt>ed</tt>, например
Союз.
<source lang="bash">
sed -i 's/abc/def/' file
</source>
может использоваться вместо
<source lang="bash">
ed file
1,$ s/abc/def/
w
q
</source>


{{морфо|корень1=sed}}
Существует расширенная версия <tt>sed</tt>, называемая '''Super-sed''' (<tt>ssed</tt>), которая включает [[регулярные выражения]], совместимые с Perl.


=== Произношение ===
== Таблица соответствия спецсимволов ==
{{transcription|}} {{медиа eo|}}
Использование HEX-16 позволяет вставлять спецсимволы
{| class="wikitable"
|+
!Символ в ASCII
!Соответствие в HEX-16
|-
|"
|\x22
|-
|'
|\x27
|-
|,
|\x2C
|-
|$
|\x24
|-
|!
|\x21
|-
|;
|\x3B
|-
|`
|\x60
|-
|<nowiki>|</nowiki>
|\x7C
|}
Пример использования:


=== Семантические свойства ===
Требуется: заменить'''"hello"''' на '''"hello world"'''


==== Значение ====
<source lang="bash">
# {{помета|союз}} [[но]], [[а]] {{пример|Mi invitis lin, {{выдел|sed}} li ne venis|перевод=Я пригласил его, {{выдел|но}} он не пришёл.}}
sed 's/\x22hello\x22\x2C/\x22hello world\x22\x2C/g'
</source>Часть символов в HEX-16 продолжает восприниматься как регулярные выражения и требует экранирования.


==== Синонимы ====
Пример:
# [[tamen]], [[kontraŭe]]


==== Антонимы ====
Требуется: заменить $config['default_host'] = <nowiki>''</nowiki>; на $config['default_host'] = ''''localhost'''<nowiki/>';<source lang="bash">
#
sed -i 's/\x24config\[\x27default_host\x27\] = \x27\x27\x3B/\x24config\[\x27default_host\x27\] = \x27localhost\x27\x3B/g' /etc/roundcube/config.inc.php
 
</source>
=== Родственные слова ===
{{родств-блок
|умласк=
|уничиж=
|увелич=
|имена-собственные=
|существительные=
|прилагательные=
|числительные=
|местоимения=
|глаголы=sedi
|наречия=
|предикативы=
|предлоги=
}}


=== Этимология ===
== См. также ==
Происходит от {{lang|la|sed|[[а]], [[но]]}} {{из|la|eo}}
* [[grep]] — поиск текста по регулярным выражениям.


=== Фразеологизмы и устойчивые сочетания ===
== Примечания ==
* {{term|kara sed plaĉa, malkara sed aĉa||Дорого да мило, дёшево да гнило|lang=eo}}
{{примечания}}


=== Библиография ===
== Ссылки ==
*  
{{столбцы}}
{{столбец}}
* [http://www.opennet.ru/man.shtml?topic=sed&category=1&russian=0 Системное руководство по sed]{{ref|ru}}
* [http://www.citforum.ru/operating_systems/articles/tut_6.shtml Неинтерактивный текстовый редактор sed]{{ref|ru}}
* [http://www.lissyara.su/?id=1076 Документация по sed]{{ref|ru}}
* [http://ant0.ru/sed1line.html Однострочные скрипты sed] {{Wayback|url=http://ant0.ru/sed1line.html |date=20080825114411 }}{{ref|ru}}
* [http://sed.sourceforge.net/sed1line.txt Однострочные скрипты sed]{{ref|en}}
* [http://ant0.ru/sed_edit_interfaces.html Редактирование /etc/network/interfaces в Debian средствами sed] {{Wayback|url=http://ant0.ru/sed_edit_interfaces.html |date=20080903055927 }}{{ref|ru}}
* [http://azarkevich.blogspot.com/2008/03/sed.html Просто о sed]{{ref|ru}}
* [http://www.catonmat.net/blog/sed-stream-editor-cheat-sheet/ Шпаргалка Sed]{{ref|en}}
* [https://web.archive.org/web/20060208161216/http://sed.sourceforge.net/ sed на SourceForge.net]{{ref|en}}
* [http://sed.sourceforge.net/sedfaq.html The sed FAQ]{{ref|en}}
{{столбец}}
* [http://www.pement.org/sed/ sed … потоковый редактор]{{ref|en}}
* [https://web.archive.org/web/20040621200520/http://www.gnu.org/directory/text/editors/super-sed.html Super-sed]{{ref|en}}
* [http://www.opengroup.org/onlinepubs/009695399/utilities/sed.html Спецификация sed в Единой спецификации UNIX на сайте The Open Group]{{ref|en}}
<!--
* http://sed.sourceforge.net/grabbag/scripts/turing.txt
* http://sed.sourceforge.net/grabbag/scripts/turing.sed
-->
* [https://web.archive.org/web/20050203181041/http://aurelio.net/sed/sokoban/ Игра сокобан на sed]{{ref|en}}
* [https://web.archive.org/web/20080930194245/http://uuner.doslash.org/forfun/ Тетрис на sed]
<!--
* [http://logger.r2.ru/lug/11.htm потоковый редактор sed]
* http://lib.fis.ru/unix/adm/adm33.htm
-->
* [http://gnuwin32.sourceforge.net/packages/sed.htm Sed for Windows]{{ref|en}}
{{столбцы/конец}}


{{unfinished|eo|s=1|p=1}}
{{Команды Unix}}
{{Категория|язык=eo|||}}
{{Текстовые редакторы}}


[[Категория:Союзы эсперанто]]
[[Категория:Инструменты Unix для обработки текста]]
{{длина слова|3|eo}}
[[Категория:Скриптовые языки]]
[[Категория:Текстовые редакторы]]

Текущая версия от 14:41, 3 декабря 2025

Шаблон:Заголовок со строчной буквы Шаблон:Карточка программы sed (от англ. Шаблон:Lang-en2) — потоковый текстовый редактор (а также язык программирования), применяющий различные предопределённые текстовые преобразования к последовательному потоку текстовых данных.

Первоначально был написан как UNIX-утилита Ли Макмэхоном (англ. Шаблон:Lang-en2) из Bell Labs в 197374 годах. Сейчас sed доступен фактически для любой операционной системы, поддерживающей работу с командной строкой.

Sed является Тьюринг-полным языком, так как на нём можно создать машину Тьюринга<ref>Шаблон:Cite web</ref><ref>Шаблон:Cite web</ref>.

Описание

sed получает входной поток (обычно файл) построчно, редактирует каждую строку согласно правилам, определённым в sed-скрипте с использованием простого языка sed, и затем выводит результат в выходной поток.

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

Набор команд sed сделан по образцу редактора ed, однако необходимо помнить о его инвертированности. Например, команда 25d редактора ed означает «идите к строке 25 и удалите её», в то время как та же команда sed означает «если это строка с номером 25, то удалите (не выводите) её». Известное исключение — это команды копирования и перемещения, которые охватывают диапазон строк и таким образом не имеют прямых эквивалентов в sed. Вместо этого sed вводит дополнительный буфер, названный «пространством захвата», и дополнительные команды для управления им. Например, команда «скопировать строку 25 в строку 76» (25t76) в ed была бы закодирована как две отдельные команды (25h; 76g) в sed для того, чтобы сохранить строку в пространстве захвата до тех пор, пока данные не будут извлечены.

Следующий пример демонстрирует типичное использование sed:

<source lang="bash">

sed -e 's/oldstuff/newstuff/g' inputFileName > outputFileName

</source> Здесь s — замена; g — глобально, что означает «все вхождения искомого значения». После первого прямого слеша расположено регулярное выражение для поиска, после второго — выражение для замены. Однако, помимо слеша может использоваться и другой символ. Так, например, выражения

<source lang="bash"> echo 123123| sed 's/1/5/g' echo 123123| sed 's%1%5%g' echo 123123| sed 's$1$5$g' echo 123123| sed 's|1|5|g' </source> полностью равнозначны.

Команда замены (s///) является самой мощной и часто используемой командой sed. Перенаправление стандартного вывода «> outputFileName» можно опустить, тогда sed выведет результат на экран.

В Unix команда sed часто используется в виде фильтра в конвейере (| или pipe): <source lang="bash">

generate_data | sed -e 's/x/y/'

</source> Таким образом генерируются данные и передаются на конвейер, чтобы заменить x на y.

Несколько команд могут быть объединены в одном файле (например, subst.sed) и затем применены в виде: <source lang="bash">

sed -f subst.sed inputFileName > outputFileName

</source>

Или можно написать файла скрипта, используя шебанг. Например, создав исполняемый файл subst.sed с содержимым: <source lang=bash>

  1. !/bin/sed -f

s/x/y/g </source>

Его можно выполнять непосредственно: <source lang=bash> subst.sed inputFileName > outputFileName </source>

Помимо замены, возможны и другие формы простой обработки. Например, следующий сценарий удаляет пустые строки или строки, которые содержат только пробелы: <source lang="bash">

sed -e '/^\s*$/d' inputFileName 

</source>

Последний пример использовал часть регулярных выражений-метасимволов:

  • ^ Соответствует началу строки
  • $ Соответствует концу строки
  • . Соответствует любому единственному символу
  • * Соответствует нулю или более повторений предшествующего символа
  • [ ] Соответствуют одному любому из символов, включённых в квадратные скобки между [ и ]
  • [^ ] Соответствуют одному любому из символов, не включённых в квадратные скобки между [^ и ]
  • \буква соответствуют одному любому символу из определённого класса символов, в частности \s — это любой пробельный символ.

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

sed — это одна из наиболее ранних команд Unix, которые позволяли обрабатывать файлы данных из командной строки. sed развился как естественный преемник популярной команды grep. Родственный более позднему языку программирования AWK, sed позволил применять в shell скриптах мощную и интересную обработку данных, и был одним из первых инструментов Unix, действительно поощрявшим адекватно использовать регулярные выражения.

sed и awk часто считаются прародителями и вдохновителями языка Perl, и в особенности синтаксиса «s///» из примера выше.

У языка sed нет переменных, есть только примитив GOTO и выполняющие ветвление функциональные возможности; тем не менее это тьюринг-полный язык.

GNU sed имеет несколько новых особенностей, например замещающая правка файлов (замена первоначального файла результатом работы sed). Замещающая правка часто используется вместо сценария ed, например <source lang="bash">

sed -i 's/abc/def/' file

</source> может использоваться вместо <source lang="bash">

ed file
1,$ s/abc/def/
w
q

</source>

Существует расширенная версия sed, называемая Super-sed (ssed), которая включает регулярные выражения, совместимые с Perl.

Таблица соответствия спецсимволов

Использование HEX-16 позволяет вставлять спецсимволы

Символ в ASCII Соответствие в HEX-16
" \x22
' \x27
, \x2C
$ \x24
! \x21
; \x3B
` \x60
| \x7C

Пример использования:

Требуется: заменить"hello" на "hello world"

<source lang="bash"> sed 's/\x22hello\x22\x2C/\x22hello world\x22\x2C/g' </source>Часть символов в HEX-16 продолжает восприниматься как регулярные выражения и требует экранирования.

Пример:

Требуется: заменить $config['default_host'] = ''; на $config['default_host'] = 'localhost';<source lang="bash"> sed -i 's/\x24config\[\x27default_host\x27\] = \x27\x27\x3B/\x24config\[\x27default_host\x27\] = \x27localhost\x27\x3B/g' /etc/roundcube/config.inc.php </source>

См. также

  • grep — поиск текста по регулярным выражениям.

Примечания

Шаблон:Примечания

Ссылки

Шаблон:Столбцы Шаблон:Столбец

Шаблон:Столбец

Шаблон:Столбцы/конец

Шаблон:Команды Unix Шаблон:Текстовые редакторы