sed означает s tream ed itor и является часто используемой командой в Linux/Unix. Название происходит от сочетания этих двух слов. Это не текстовый редактор, хотя он изменяет текст. Вместо этого sed получает текстовый ввод как «поток» и редактирует поток в соответствии с вашими инструкциями.
В целом люди используют sed
как версию командной строки для поиска и замены. Основная команда в программе используется для замены одной строки символов на другую. Это делает его полезным для запуска функций поиска и замены в пакете файлов, но его не так просто использовать, как что-то из Блокнота или Word. Вы обнаружите, что к синтаксису нужно немного привыкнуть, но как только вы его освоите, вы увидите, насколько невероятно мощным может быть этот компактный редактор.
Использование sed для замены
Чтобы использовать sed, вам нужно открыть окно терминала. Команда вызывается с помощью sed
, но ее ввод сам по себе ничего не даст. Вам необходимо указать одну из команд, а также некоторые параметры.
Самый распространенный параметр — подстановка, или s
. Простая команда подстановки sed
выглядит примерно так:
sed 's/cat/dog/'
Эта команда прикажет sed сканировать входящий текст и заменять каждый экземпляр строки «cat» на «dog». Для демонстрации мы воспол
Contents
Использование sed для замены
тобы предоставить sed что-то для работы.echo cat catapult | sed 's/cat/dog/'
Команда sed состоит из трех основных частей. Во-первых, sed
запускает программу. Затем есть s
, который запускает команду замены. Косая черта /
является разделителем. Строка после этого будет строкой, которую ищет sed. Строка после второй косой черты будет символами замены, которые sed записывает в поток. Последняя косая черта закрывает команду. В целом это 's/text-to-find/text-to-replace/'
.
Обратите внимание на одинарные кавычки в этом примере. Одинарные кавычки позволяют использовать в команде метасимволы. Хотя в большинстве наших примеров кавычки не обязательны, вам следует выработать привычку использовать кавычки для всех команд.
А как насчет частичных строк? Приведенная выше команда будет работать с любым появлением строки «кошка», даже если она является частью другого слова. Например, «катапульта» станет «догапультой», а «катамаран» станет «догамараном».
echo catapult | sed 's/cat/dog/'
Глобальная замена
В нашем первом примере вы могли заметить, что был заменен только первый экземпляр соответствующей строки. Как и многие утилиты GNU, sed основан на строках. В результате он работает только с первым совпадением в строке. Если у вас есть несколько совпадений для строки-кандидата в строке, будет изменен только первый из них. Чтобы sed работал при каждом вхождении целевой строки, используйте флаг g
в конце команды:
sed 's/cat/dog/g'
Это будет работать как в следующем примере:
echo cat catapult catamaran | sed 's/cat/dog/g'
Без глобального флага будет заменен только первый экземпляр слова «cat» в каждой строке.
Настройка входных и выходных файлов
По умолчанию sed будет работать со стандартным вводом. Однако это не слишком полезно. Чтобы запустить sed для файла, укажите имя файла в конце команды, например:
sed 's/cat/dog/g' oldfile.txt > newfile.txt
Это запустит sed для «oldfile.txt» и сохранит вывод команды в «newfile.txt». Если «newfile.txt» не существует, он будет создан командой. Если вы не укажете выходной файл, sed выведет новый текст файла на стандартный ввод.
Если вы хотите перезаписать содержимое файла, вам нужно будет использовать флаг -i
. Этот флаг делает изменения «на месте».
sed -i '' 's/caГлобальная замена
/pre>
Эта команда немедленно перезаписывает содержимое целевого файла, что немного опасно. На всякий случай вы можете создать резервную копию на месте.
Чтобы создать резервную копию файла, добавьте расширение после -i
. Это не обязательно должно быть функциональное расширение: «.bu» или «.bak» подойдут. При этом будет создан файл резервной копии с расширением.
sed -i.bak 's/cat/dog' oldfile.txt
При этом создается файл «oldfile.txt.bak», содержащий неотредактированные текстовые данные из исходной версии «oldfile.txt».
Соответствие регулярным выражениям
Настоящая сила sed
заключается в сопоставлении регулярных выражений. Это позволяет вам устанавливать шаблоны для сопоставления, а не буквальные строки. Например, мы могли бы использовать что-то вроде строки ниже, чтобы повторить любой набор из одного или нескольких чисел:
echo "123 abc" | sed 's/[0-9][0-9]*/& &/'
Дальнейшее обучение
sed — чрезвычайно мощная утилита, по своим возможностям схожая с языком сценариев. Чтобы узнать больше о все