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"