Я видел много в sed
последнее время, и я считаю, что это довольно запутанная команда. Руководства не были особенно полезны, но я знаю, что их можно использовать для анализа вывода других команд.
Что именно sed
и для чего он используется? Я ищу исчерпывающий ответ, охватывающий, что sed
есть, для чего он обычно используется, и некоторые основные примеры / синтаксис.
command-line
sed
Сет
источник
источник
Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors.
info sed
имеет намного больше, чемman sed
. Тогда/usr/share/doc/sed
естьsedfaq.txt.gz
.Ответы:
В основном использовании он используется для поиска и замены строк.
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
ее весьма всеобъемлющий характер .источник
Определения
Unix System V: практическое руководство , книга Марка Собелла:
Справочная страница для sed (GNU sed) 4.2.2:
Мое неформальное определение:
Sed
(сокращение от редактора потоков ) - это утилита обработки текста, которая была разработана в то время, когда текст обрабатывался по одной строке за раз, но остается одной из самых мощных утилит Unix / Linux; в то же время это форма языка сценариев, разработанная специально для обработки текста.Пользы
Как показывают определения,
sed
используется для пакетной обработки строк текста, текстовых файлов и потоковых потоков текста. Чаще всего он используется для замены, а также удаления текста:Тем не менее, он также может быть использован для имитации поведения других команд. Например,
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 приложения и примеры
Sed однострочники
Управление текстом с помощью sed, Linux Journal
sed - 20 примеров удаления / удаления символов из файла
Sed Script - Реверсивные имена
Как я могу заменить строку в файле (ах)?
Как я могу удалить каждую вторую строку файла?
источник
sed
это мощная команда, которая позволяет вам создавать вещи (удалять строки, подстановку строк, фильтрацию строк и т. д.).Я мог бы дать вам список использований с аргументами, но Интернет заполнен этим. Поиск
sed usage by examples
принес мне много результатов, симпатичный: http://www.thegeekstuff.com/2009/10/unix-sed-tutorial-advanced-sed-substitution-examples/источник
Этот ответ находится в стадии разработки - он пропускает больше примеров о команде susbstitute
Что такое
sed
?sed
= Stream EDitorОписание на странице руководства для
sed
отчетов GNU 4.2.2:Описание на странице GNU
sed
на gnu.org сообщает:Для чего
sed
используется?Он может использоваться для выполнения сложных модификаций потоков данных (обычно текстовых, но также может использоваться для изменения двоичных данных).
Среди наиболее распространенных случаев использования:
Это случаи использования, описанные в этом ответе.
использование
sed
читает входные данные из файла, хранящегося в файловой системе, если имя файла указано в аргументах командной строки во время его вызова, или из,stdin
если имя файла не указано.Минимальный вызов с использованием файла, хранящегося в файловой системе:
Минимальный вызов с использованием
stdin
:Привет, мир!
sed
по умолчанию читает входной файл построчно; он читает одну строку, удаляет завершающий символ новой строки и помещает обработанную строку в «пространство шаблона»; наконец, он выполняет перечисленные команды для текущего содержимого пространства шаблона и считывает новую строку из входного файла.Если никакая команда не указана или когда указана команда a
p
илиd
*,sed
всегда будет печататься текущее содержимое пространства шаблона, за которым следует символ новой строки на каждой итерации, независимо от:Чтобы предотвратить это, можно вызвать
sed
вместе с-n
коммутатором:* Говоря только для
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
: удаляет строки, соответствующие указанному адресу / диапазону адресов;Когда одной из этих команд не предшествует адрес / выбор, команда выполняется глобально, то есть в каждой строке входного файла.
Примеры: распечатать, удалить
Печать / удаление строк с указанием числовых адресов:
Образец файла:
<N>
:<N>
:<N>
до<M>
включительно:<N>
до<M>
включительно:Печать / удаление строк с указанием шаблонов:
Образец файла:
<pattern>
:<pattern>
:<pattern1>
до соответствия строки<pattern2>
включительно:<pattern1>
для соответствия строк<pattern2>
включительно:Команда: заменить
Команда, используемая для подстановки выбора:
s
: заменяет строки, соответствующие указанному адресу / диапазону адресов;Когда этой команде не предшествует адрес / выбор, команда выполняется глобально, то есть в каждой строке входного файла.
Синтаксис
s
команды:Косые черты являются «разделителями»; они используются для разделения
<pattern>
,<replacement_string>
и<pattern_flags>
секции;Разделителем всегда является символ, непосредственно следующий за
s
командой; он может быть установлен на любой другой символ, например|
:<pattern>
является базовым или расширенным регулярным выражением;<replacement_string>
является фиксированной строкой, которая может включатьsed
-специфичные последовательности со специальным значением;<pattern_flags>
список флагов, которые изменяют поведение<pattern>
.Наиболее распространенные
sed
-специфичные последовательности со специальным значением:&
: обратная ссылка заменяется на строку, совпадающую с<pattern>
;\<N>
(где<N>
число): обратная ссылка заменяется на<N>
группу, захваченную в<pattern>
;Наиболее распространенные флаги:
g
: заставляет<pattern>
совпадать глобально, то есть несколько раз в каждой строке;i
: заставляет<pattern>
совпадать без учета регистра;p
: печатает строки, на которых была произведена замена, еще раз (полезно при использовании вызова-n
switch insed
для печати только строк, на которых была выполнена замена);Примеры: замена
Образец файла:
<pattern>
с<replacement_string>
на каждой строке:<pattern>
с<replacement_string>
на каждую строку:<pattern1>
и заменяющие всех вхождений<pattern2>
с<replacement_string>
:<pattern1>
и заменяющие всех вхождений<pattern2>
с<replacement_string>
:источник