sed примеры


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

Первоначально был написан как UNIX-утилита Ли Макмэхоном (англ. Lee E. McMahon) из Bell Labs в 1973—74 годах. Сейчас sed доступен фактически для любой операционной системы, поддерживающей работу с командной строкой

^ Соответствует началу строки $ Соответствует концу строки . Соответствует любому единственному символу * Соответствует нулю или более повторений предшествующего символа [ ] Соответствуют одному любому из символов включённых в квадратные скобки s/ Соответствует Заменить

Самые простейшие и полуряные команды:

Замена:

sed -e 's/то-что-заменить/то-чем-заменить/g' входящий-файл > новый-файл

Удалить пустые строки и строки стостоящие из одних пробелов:

 sed -e '/^\s*$/d' входящий-файл

Разное:

 # удаляем пробелы и табуляции с начала каждой строки
 # весь текст выравнивается по левому краю
 sed 's/^[ \t]*//'

 # удаляем пробелы и табуляции в конце каждой строки
 sed 's/[ \t]*$//'

 # удалить пробелы и табуляции как в начале так и в конце строки
 sed 's/^[ \t]*//;s/[ \t]*$//'

 # вставить 5 пробелов в начале каждой строки (смещение страницы)
 sed 's/^/     /'

 # выравнивание всего текста по правому краю на ширину колонки 79
 sed -e :a -e 's/^.\{1,78\}$/ &/;ta'  # задаем 78 плюс 1 пробел

 # выровнять весь текст по центру, два метода
 sed  -e :a -e 's/^.\{1,77\}$/ & /;ta'                     # method 1
 sed  -e :a -e 's/^.\{1,77\}$/ &/;ta' -e 's/\( *\)\1/\1/'  # method 2

 # замена в каждой строке "foo" на "bar"
 sed 's/foo/bar/'   # заменяет только первое
                        # найденное значение в строке
 sed 's/foo/bar/4'  # заменяет только 4 первых значений в строке
 sed 's/foo/bar/g'  # заменяет все значения в строке
 sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' # заменяет следующий
                                               # за встреченным
 sed 's/\(.*\)foo/\1bar/'  # заменяет только последнее "foo"

 # заменить "foo" на "bar" ТОЛЬКО для строк, в которых есть "baz"
 sed '/baz/s/foo/bar/g'

 # заменить "foo" на "bar" КРОМЕ тех строк, в которых есть "baz"
 sed '/baz/!s/foo/bar/g'

 # заменить "scarlet" или "ruby" или "puce" на "red"
 sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g'   # все seds
 gsed 's/scarlet\|ruby\|puce/red/g'                # GNU sed

 # расстановка строк в обратном порядке (эмуляция "tac")
 # bug/feature в HHsed v1.5 удаляет еще и все пустые строки
 sed '1!G;h;$!d'      # метод 1
 sed -n '1!G;h;$p'   # метод 2

 # reverse each character on the line (emulates "rev")
 sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

 # соединяет пары строк друг с другом (как "paste")
 sed '$!N;s/\n/ /'

 # если строка заканчивается на backslash (\), присоединить следующую
 # строку к ней
 sed -e :a -e '/\\$/N; s/\\\n//; ta'

 # если строка начинается со знака равенства, добавить ее
 # к предыдущей строке и заменить "=" на один пробел
 sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'

 # разделять числа запятыми, заменяет "1234567" на "1,234,567"
 gsed ':a;s/\B[0-9]\{3\}\>/,&/;ta'                     # GNU sed
 sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta'  # все seds

 # добавить запятые для чисел с десятичной точкой и знаком минуса
 gsed -r ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/\1\2,\3/g;ta'

 # добавить строку кадые 5 строк (после строк 5, 10, 15, 20, и тд.)
 gsed '0~5G'                  # GNU sed
 sed 'n;n;n;n;G;'             # все seds

Новые версии sed поддерживают редактирование входящего файла, к регулярке надо просто добавить команду -i:

sed -i 's/foo/bar/g' /path/to/my/file
comments powered by Disqus