Что такое sed и для чего он используется?

Я видел много sed в последнее время, и я считаю, что это довольно запутанная команда. Страницы man не были особенно полезны, но я знаю, что их можно использовать для анализа вывода других команд.

Что такое sed и для чего он используется? Я ищу исчерпывающий ответ, охватывающий, что такое sed, для чего он обычно используется, и некоторые основные примеры / синтаксис.

19
задан 22 May 2013 в 07:34

4 ответа

В основном использовании он используется для «поиска и замены» со строками.

echo "The quick brown fox jumps over the lazy dog" | sed 's/dog/cat/'

возвращает

"The quick brown fox jumps over the lazy cat"

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

Вы могли бы взглянуть на эту статью о sed, она довольно всеобъемлющая.

0
ответ дан 22 May 2013 в 07:34

sed - это мощная команда, которая позволяет вам что-то делать (удалять строки, подстановку строк, фильтрацию строк и т. Д.).

Я мог бы дать вам список использований с аргументами, но Интернет заполнен этим. Поиск sed usage by examples принес мне много результатов, симпатичный: http://www.thegeekstuff.com/2009/10/unix-sed-tutorial-advanced-sed-substitution-examples/ [ 114]

0
ответ дан 22 May 2013 в 07:34

Определения

Unix System V: практическое руководство , книга Марка Собелла:

Утилита sed - это пакетная программа (неинтерактивный) редактор. Команды sed обычно хранятся в файле сценария. , Хотя вы можете давать простые команды sed из командной строки. , .

Справочная страница для sed (GNU sed) 4.2.2:

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

Мое неофициальное определение:

Sed (сокращение от потокового редактора ) - это утилита для обработки текста, которая была разработана во время обработки текста. одновременно, но остается одной из самых мощных утилит Unix / Linux; в то же время это форма языка сценариев, разработанная специально для обработки текста.

Использует

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

echo "stackexchange" | sed 's/stackexchange/askubuntu/'

Однако он также может использоваться для имитации поведения других команд. Например,

  • для имитации dmesg | head -n 3 (печать первых 3 строк) мы можем сделать dmesg | sed -n 1,3p.
  • , чтобы имитировать dmesg | grep 'wlan0' (поиск строки), мы можем сделать dmesg | sed -n '/wlan0/p'
  • Элемент списка

Большое преимущество, которое sed имеет над другие утилиты для обработки текста - это флаг -i, означающий, что мы можем не только вывести отредактированный текст на экран, но и фактически сохранить редактирование в исходном файле. awk вкусы, напротив, имеют такую ​​особенность только в версии GNU awk.

sed может принимать входные данные в командной строке с несколькими шаблонами, разделенными точкой с запятой (;) или из файла сценария, указанного после флага -f, например, cat someTextfile.txt | sed -f myScript.sed

Приложения и примеры Sed

0
ответ дан 22 May 2013 в 07:34

Этот ответ является происходящей работой - он пропускает больше примеров о команде susbstitute


Что sed?

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

Описание в странице руководства для GNU sed 4.2.2 отчета:

Sed является потоковым редактором. Потоковый редактор используется для выполнения основных текстовых преобразований на входном потоке (файл или вход от конвейера). В то время как до некоторой степени подобный редактору, который разрешает редактирования в виде сценария (такие как редактор), sed работы, заставляя только один передать по входу (входам), и следовательно более эффективен. Но это - способность sed к тексту фильтра в конвейере, который особенно отличает его от других типов редакторов.

Описание в GNU sed страница в отчетах gnu.org:

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

Что sed используемый для?

Это может использоваться для выполнения сложных модификаций к потокам данных (обычно текст, но это может использоваться также для изменения двоичных данных).

Среди наиболее распространенных случаев использования существуют:

  • Выборочно печатая / удаление строк от текстового файла, использующего основной / расширенные регулярные выражения
  • Глобально заменяющие строки в текстовом файле, использующем основной / расширенные регулярные выражения
  • Выборочно заменяющие строки в текстовом файле, использующем основной / расширенные регулярные выражения

Это случаи использования, охваченного в этом ответе.

Использование

sed читает вход из файла, хранившего в файловой системе, если имя файла указано в параметрах командной строки во время его вызова, или от stdin если никакое имя файла не указано.

Минимальный вызов с помощью файла сохранил в файловой системе:

sed '' file

Минимальное использование вызова stdin:

# herestring
<<<'Hello, World!' sed ''

# heredoc
<<'EOF' sed ''
heredoc> Hello, World!
heredoc> EOF

# file
<'file' sed ''

# pipe
echo 'Hello, World!' | sed ''

Привет, мир!

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

Когда никакая команда не указана или когда a p или a d команда указана *, sed будет всегда печатать текущее содержание пространства шаблона, сопровождаемого новой строкой при каждом повторении независимо:

user@debian ~ % sed '' file
Hello, world! # no command but the lines are printed
user@debian ~ % sed 'p' file
Hello, World!
Hello, World! # the p command prints the lines already printed
user@debian ~ % sed 'd' file
user@debian ~ % # the d command deletes the lines that would be printed

Предотвратить этого может вызвать sed наряду с -n переключатель:

user@debian ~ % sed -n '' file
user@debian ~ % sed -n 'p' file
Hello, World!
user@debian ~ % sed -n 'd' file
user@debian ~ % 

* Разговор только за p, d и s команды, которые являются командами, охваченными в этом ответе.

Выбор строк

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

Возможные комбинации адресов:

  • <N> (где <N> число): следующая команда / команды будет выполняться только на номере строки <N>;
  • <N>,<M> (где <N> и <M> два числа, <N> > <M>): следующая команда / команды будет выполняться на строках в пределах от номера строки <N> к номеру строки <M> включительно;
  • /<pattern>/ (где <pattern> основное или расширенное регулярное выражение): следующая команда / команды будет выполняться только на строках, содержащих происшествие <pattern>;
  • /<pattern1>/,/<pattern2>/ (где <pattern1> и <pattern2> основные или расширенные регулярные выражения): следующая команда / команды будет выполняться на строках в пределах от первой строки, содержащей происшествие <pattern1> к следующей строке, содержащей происшествие <pattern2>, многократно в случае нескольких приказанных <pattern1>-<pattern2> происшествия;
  • <N>,/pattern/ (где <N> число и <pattern> основное или расширенное регулярное выражение): следующая команда / команды будет выполняться на строках в пределах от номера строки <N> к первой строке, содержащей происшествие <pattern>;
  • /pattern/,<N> (где <pattern> основное или расширенное регулярное выражение и <N> число): следующая команда / команды будет выполняться на строках в пределах от первой строки, содержащей происшествие <pattern> к номеру строки <N>;

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

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

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

Команды: распечатайте, удалите

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

  • p: строки печати, соответствующие указанному адресу / диапазон адресов;
  • d: удаляет строки, соответствующие указанному адресу / диапазон адресов;

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

Примеры: распечатайте, удалите

Печать / удаление строк, указывающих числовые адреса:

Файл примера:

line1
line2
line3
line4
line5
  • Печать строки <N>:
sed -n '<N>p' file
user@debian ~ % sed -n '3p' file
line3
  • Удаление строки <N>:
sed '<N>d' file
user@debian ~ % sed '3d' file
line1
line2
line4
line5
  • Печать строки <N> кому: <M> включительно:
sed -n '<N>,<M>p' file
user@debian ~ % sed -n '2,4p' file
line2
line3
line4
  • Удаление строки <N> кому: <M> включительно:
sed '<N>,<M>d' file
user@debian ~ % sed '2,4d' file
line1
line5

Печать / удаление строк, указывающих шаблоны:

Файл примера:

First line
Start printing / deleting here
Random line
Random line
Random line
Stop printing / deleting here
Last line
  • Печать соответствия строк <pattern>:
sed -n '/<pattern>/p' file
user@debian ~ % sed -n '/print/p' file
Start printing / deleting here
Stop printing / deleting here
  • Удаление соответствия строк <pattern>:
sed '/<pattern>/d' file
user@debian ~ % sed '/print/d' file 
First line
Random line
Random line
Random line
Last line
  • Печать строк от соответствия строки <pattern1> к соответствию строки <pattern2> включительно:
sed -n '/<pattern1>/,/<pattern2>/p' file
user@debian ~ % sed -n '/Start/,/Stop/p' file
Start printing / deleting here
Random line
Random line
Random line
Stop printing / deleting here
  • Удаление строк от соответствия строки <pattern1> к соответствию строки <pattern2> включительно:
sed '/<pattern1>/,/<pattern2>/d' file
user@debian ~ % sed '/Start/,/Stop/d' file 
First line
Last line

Команда: замена

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

  • s: строки замен, соответствующие указанному адресу / диапазон адресов;

Когда этой команде не предшествует адрес / выбор, команда выполняется глобально, т.е. на каждой строке входного файла.

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

s/<pattern>/<replacement_string>/<pattern_flags>

Наклонные черты являются "разделителями"; они используются для разграничивания <pattern>, <replacement_string> и <pattern_flags> разделы;

Разделитель всегда является символом сразу после s команда; это может быть установлено на любой другой символ, например, |:

s|<pattern>|<replacement_string>|<pattern_flags>

<pattern> основное или расширенное регулярное выражение; <replacement_string> фиксированная строка, которая может включать sed- определенные последовательности с особым значением; <pattern_flags> список флагов, которые изменяют поведение <pattern>.

Наиболее распространенный sed- определенные последовательности с особым значением:

  • &: обратная ссылка, замененная строкой, подобранной <pattern>;
  • \<N> (где <N> число): обратная ссылка, замененная <N> группа, полученная в <pattern>;

Наиболее распространенные флаги:

  • g: силы <pattern> соответствовать глобально, т.е. многократно в каждой строке;
  • i: силы <pattern> соответствовать нечувствительно к регистру;
  • p: строки печати, на которых замена была выполнена еще раз (полезный при использовании -n переключатель в sedвызов для печати только строк, на которых замена была выполнена);

Примеры: замена

Файл примера:

A-well-a everybody's heard about the bird
B-b-b-bird, bird, bird, b-bird's the word
A-well-a bird, bird, bird, the bird is the word
A-well-a bird, bird, bird, well the bird is the word
A-well-a bird, bird, bird, b-bird's the word
A-well-a bird, bird, bird, well the bird is the word
A-well-a bird, bird, b-bird's the word
A-well-a bird, bird, bird, b-bird's the word
A-well-a bird, bird, bird, well the bird is the word
A-well-a bird, bird, b-bird's the word
A-well-a don't you know about the bird?
Well, everybody knows that the bird is the word!
A-well-a bird, bird, b-bird's the word
A-well-a...
  • Замена первого вхождения <pattern> с <replacement_string> на каждой строке:
sed 's/<pattern>/<replacement_string>/' file
user@debian ~ % sed 's/bird/birds/' file
A-well-a everybody's heard about the birds
B-b-b-birds, bird, bird, b-bird's the word
A-well-a birds, bird, bird, the bird is the word
A-well-a birds, bird, bird, well the bird is the word
A-well-a birds, bird, bird, b-bird's the word
A-well-a birds, bird, bird, well the bird is the word
A-well-a birds, bird, b-bird's the word
A-well-a birds, bird, bird, b-bird's the word
A-well-a birds, bird, bird, well the bird is the word
A-well-a birds, bird, b-bird's the word
A-well-a don't you know about the birds?
Well, everybody knows that the birds is the word!
A-well-a birds, bird, b-bird's the word
  • Замена всех происшествий <pattern> с <replacement_string> на каждой строке:
sed 's/<pattern>/<replacement_string>/g' file
user@debian ~ % sed 's/bird/birds/g' file
A-well-a everybody's heard about the birds
B-b-b-birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, the birds is the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a don't you know about the birds?
Well, everybody knows that the birds is the word!
A-well-a birds, birds, b-birds's the word
A-well-a...
  • Выбор только строк, запускающихся с <pattern1> и замена всех происшествий <pattern2> с <replacement_string>:
sed -n '/^<pattern1>/s/<pattern2>/<replacement_string>/pg' file
user@debian ~ % sed -n '/^A/s/bird/birds/pg' file
A-well-a everybody's heard about the birds
A-well-a birds, birds, birds, the birds is the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a don't you know about the birds?
A-well-a birds, birds, b-birds's the word
  • Выбор только строк, заканчивающихся <pattern1> и замена всех происшествий <pattern2> с <replacement_string>:
sed -n '/<pattern1>$/s/<pattern2>/<replacement_string>/pg' file
user@debian ~ % sed -n '/word$/s/bird/birds/pg' file
B-b-b-birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, the birds is the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, b-birds's the word
1
ответ дан 22 May 2013 в 07:34

Другие вопросы по тегам:

Похожие вопросы: