sed

- 2 mins read
📝 sed (от англ. stream editor, потоковый редактор) — утилита в Unix-подобных операционных системах, которая обрабатывает и преобразует текст на лету. Считывает данные построчно, выполняет заданные скриптом или командой действия и выводит результат. Используется для автоматизации обработки файлов без открытия их в интерактивных редакторах (например, для поиска и замены строк или удаления лишних данных)
ℹ️ Замена текста (Шаблон: s/что_ищем/на_что_меняем/флаги)
sed 's/слово/замена/' file.txt          # Заменит только первое совпадение в каждой строке
sed 's/слово/замена/g' file.txt         # Флаг 'g' (global): заменит ВСЕ совпадения в файле
sed -i 's/слово/замена/g' file.txt      # Флаг '-i': сохранит изменения прямо в файл (In-place)
sed -i '' 's/old/new/g' file.txt        # Синтаксис сохранения в файл для macOS (BSD sed)
sed 's/слово/замена/2' file.txt         # Заменит только второе совпадение в строке
sed -n 's/test/ready/p' file.txt        # Флаг 'p' и '-n': выведет в консоль только измененные строки
ℹ️ Удаление строк(Команда ’d')
sed '3d' file.txt                       # Удалит ровно 3-ю строку
sed '2,5d' file.txt                     # Удалит диапазон со 2-й по 5-ю строку
sed '/строка/d' file.txt                # Удалит все строки, содержащие "строка"
sed '/^$/d' file.txt                    # Удалит все пустые строки (^ - начало, $ - конец строки)
ℹ️ Фильтрация и вывод (Команда ‘p’ с флагом ‘-n’)
sed -n '5p' file.txt                    # Выведет в консоль только 5-ю строку
sed -n '2,5p' file.txt                  # Выведет только строки со 2-й по 5-ю
ℹ️ Работа с точечными строками
sed '5s/old/new/g' file.txt             # Сделает замену текста ТОЛЬКО внутри 5-й строки
sed '/pattern/s/old/new/g' file.txt     # Сделает замену только в тех строках, где есть "pattern"
ℹ️ Использование регулярных выражений (Флаг ‘-E’)
sed -E 's/[0-9]+/DIGIT/g' file.txt      # Заменит любые числа на слово "DIGIT"

📝 Дополнительные продвинутые фишки sed
ℹ️ Сложные замены и регексы

sed -E 's/([0-9]{2})\.([0-9]{2})/\2-\1/g' file.txt   # Карманы (группы): меняет местами группы цифр (например, 12.34 -> 34-12)
sed 's/apple/& pie/g' file.txt                       # Символ '&' вставляет то, что было найдено (apple -> apple pie)
sed 's/apple/ORANGE/gi' file.txt                     # Флаг 'i': регистронезависимая замена (найдет Apple, APPLE, apPle)
ℹ️ Добавление и вставка текста
sed '3i\Новая строка' file.txt                       # Вставит "Новая строка" СВЕРХУ (перед) 3-й строкой
sed '3a\Новая строка' file.txt                       # Вставит "Новая строка" СНИЗУ (после) 3-й строки
sed '3c\Замененная строка' file.txt                  # Полностью ЗАМЕНИТ всю 3-ю строку на новый текст
ℹ️ Множественные команды (Флаг ‘-e’)
sed -e 's/а/б/g' -e 's/в/г/g' file.txt               # Выполнит несколько замен по очереди за один проход
sed 's/а/б/g; s/в/г/g' file.txt                      # То же самое, но через точку с запятой внутри одних кавычек
ℹ️ Инверсия и диапазоны
sed '1,10!d' file.txt                                # Знак '!': инвертирует действие. Удалит ВСЕ строки, кроме первых десяти
sed '/start/,/end/d' file.txt                        # Удалит весь блок текста от строки со "start" до строки с "end"