Найти тему

Знакомимся с sed. Основные команды. Когда есть смысл использовать?

Оглавление

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

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

Пример: если у тебя есть файл example.txt с текстом, и ты хочешь заменить все вхождения слова "яблоко" на "апельсин", ты можешь использовать такую команду (в терминале):

sed 's/яблоко/апельсин/g' example.txt
  • s — это команда замены (substitute),
  • яблоко — слово, которое нужно найти,
  • апельсин — слово, на которое нужно заменить,
  • g — указывает, что замена должна происходить для всех вхождений на каждой строке.

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

Классическое определение sed

sed - Стримовый (потоковый) текстовый редактор

или вот еще:

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

Основные концепции

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

Синтаксис

sed [опции] 'команда' [файл]
  • команда — это набор инструкций, которые будут выполнены над каждой строкой. Например, замена текста, удаление строк, вставка новых строк и т.д.
  • файл — файл, который будет обрабатываться. Если файл не указан, sed работает с вводом через стандартный поток (stdin).

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

1. Замена текста

Самая распространенная команда — это s, которая используется для замены.

sed 's/старое/новое/' файл.txt

Этот пример заменит первое вхождение слова "старое" на "новое" в каждой строке файла файл.txt.

Пример совместно с командой echo:

echo "Привет, мир!" | sed 's/мир/вселенная/'

Результат:

Привет, вселенная!

2. Замена всех вхождений в строке

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

sed 's/старое/новое/g' файл.txt

Пример совместно с командой echo:

echo "apple apple apple" | sed 's/apple/banana/g'

Результат:

banana banana banana

3. Изменение файла на месте

Чтобы изменить исходный файл на месте, используйте опцию -i:

sed -i 's/старое/новое/g' файл.txt

Этот синтаксис перезапишет файл файл.txt с внесенными изменениями.

Примечание: В системах на базе BSD (например, macOS) необходимо использовать синтаксис -i '' или -i.bak для создания резервной копии файла.

sed -i.bak 's/старое/новое/g' файл.txt

Это создаст резервную копию файла с расширением .bak.

4. Удаление строк

Команда d используется для удаления строк.

  • Удалить строку по номеру:
sed '5d' файл.txt

Этот пример удалит пятую строку файла.

  • Удалить диапазон строк:
sed '2,4d' файл.txt

Этот пример удалит строки со второй по четвертую включительно.

Пример совместно с командой echo:

echo -e "строка1\nстрока2\nстрока3\nстрока4" | sed '2,3d'

Результат:

строка1
строка4

5. Удаление строк по шаблону

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

  • Удалить строки, содержащие слово "ошибка":
sed '/ошибка/d' файл.txt

Пример совместно с командой echo:

echo -e "Успех\nОшибка\nУспех" | sed '/Ошибка/d'

Результат:

Успех
Успех

6. Вставка строк

Команда i используется для вставки строки перед указанной.

sed '2i Вставленная строка' файл.txt

Этот пример вставит строку "Вставленная строка" перед второй строкой в файле файл.txt.

Пример совместно с командой echo:

echo -e "строка1\nстрока2\nстрока3" | sed '2i Вставленная строка'

Результат:

строка1
Вставленная строка
строка2
строка3

7. Добавление строк

Команда a добавляет строку после указанной.

sed '2a Добавленная строка' файл.txt

Пример совместно с командой echo:

echo -e "строка1\nстрока2\nстрока3" | sed '2a Добавленная строка'

Результат:

строка1
строка2
Добавленная строка
строка3

8. Печать строк

Команда p позволяет выводить строки, соответствующие шаблону или диапазону.

  • Напечатать строки, содержащие слово "ошибка":
sed -n '/ошибка/p' файл.txt

Флаг -n подавляет вывод всех строк, кроме тех, которые соответствуют шаблону и были явно указаны для вывода командой p.

Пример совместно с командой echo:

echo -e "Успех\nОшибка\nУспех" | sed -n '/Ошибка/p'

Результат:

Ошибка

9. Замена с использованием регулярных выражений

sed поддерживает регулярные выражения для поиска сложных шаблонов.

Пример 1: Замена цифр на символы

echo "abc 123 def" | sed 's/[0-9]/X/g'

Результат:

abc XXX def

Пример 2: Замена нескольких пробелов на один

echo "слово слово" | sed 's/ \+/ /g'

Результат:

слово слово

Здесь \+ означает "один или более пробелов".

10. Перемена местами двух слов

Использование групп регулярных выражений для перестановки слов.

Пример:

echo "first second" | sed 's/\([a-zA-Z]\+\) \([a-zA-Z]\+\)/\2 \1/'

Результат:

second first

Здесь:

  • \([a-zA-Z]\+\) — это первая группа (слово из букв).
  • \([a-zA-Z]\+\) — это вторая группа.
  • В замене \2 \1 указывает на перестановку второй и первой групп.

11. Удаление пустых строк

Чтобы удалить пустые строки из файла:

sed '/^$/d' файл.txt

Пример:

echo -e "строка1\n\nстрока2" | sed '/^$/d'

Результат:

строка1
строка2

Заключение

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

Некоторые полезные советы:

  • Тестирование: Всегда полезно сначала протестировать команды на небольших примерах или использовать sed без записи в файл.
  • Резервные копии: Перед изменением файлов с -i рекомендуется делать резервные копии (-i.bak).

sed часто используется в скриптах и в командной строке для автоматизации задач по обработке текстов.

Если Вам интересно, что еще можно найти на канале QA Helper, прочитайте статью: Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?

Подписывайтесь в на мой канал в Телеграмм.

Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика

Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.

Обязательно прочитайте: Что должен знать и уметь тестировщик

Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам