Знакомство с потоковым редактором sed
Поиск по тексту нередко предполагает последующую замену текста или какое-либо другое редактирование. В этом смысле sed – своего рода логическое продолжение grep'а.
Sed – это потоковый текстовый редактор. Потоковый, потому что не загружает весь текст в память, как обычный редактор, а читает его построчно, в потоке. При этом применяет к каждой строке набор команд, описанных программистом заранее. Отсюда следует, что sed имеет свой, хоть и небольшой, язык программирования. Пример:

С помощью команды cat был создан файл text.txt. Потом с помощью sed мы заменили слово 'one' на 'ONE'. Результат обработки был выведен на экран. Сам файл остался без изменений.
Если требуется сохранить отредактированный вариант, то вывод следует перенаправить в файл.

Также можно использовать ключ -i:

Суффикс после -i будет добавлен к новому файлу. Если же использовать -i без суффикса, то произойдет перезапись существующего файла:

Выражение 's/one/ONE/' – это одна команда. Символ s в начале указывает, что надо найти строку, стоящую после первого слэша, и заменить ее строкой, стоящей после второго. Поскольку sed'у можно передавать несколько команд, то их разделяют точкой с запятой. Также в этом случае потребуется ключ -e.

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

Команда вида 's/one/two/' заменяет в каждой строке только первое вхождение 'one'. Однако в строке таких подстрок может быть несколько. Чтобы заменить все вхождения, после последнего слэша в команде пишется флаг g.

Если надо заменить подстроку, в которой используется символ слэша, его экранируют обратным слэшем. Другой способ – использовать в качестве разделителя частей команды не слэш. Sed считает разделителем любой символ перед искомой строкой.

Все это вершина айсберга. Sed включает множество возможностей – замена только в определенной строке, замена целой строки, работа с диапазонами строк, удаление и вставка строк и другое.
Как и в случае с grep в качестве подстрок часто используют регулярные выражения:

В примере регулярное выражение '^\s*$' ищет пустые строки, а инструкция d удаляет их.