Рецепты sed


Как и в случае с другими командами - главное для sed - это опыт, который
можно получить только практикой. А практика начинается с обычного текстового
файла, который можно создать в обычном консольном редакторе типа nano и затем
использовать как материал для sed. У меня это выглядело так:

# исходный файл
cat file.txt | nl

 1	москва
 2	питер
 3	санкт петербург
 4	киев
 5	минск
 6	новгород
 7	уфа
 8	казань
 9	иркутск
10	сергиев посад
11	павловский посад
12	калязин
13	углич
14	самара
15	владимир
16	суздаль
17	кострома

Дальше я начал свои эксперименты:

# вывести всё в одну строку
sed ':a;{N;s/n//;ba}' file.tx

# вывести строку N3
sed -n 3p file.txt

# удалить строку N3 (cанкт петербург)
sed 3d file.txt

# вывести "посады"
sed -n '/посад/p' file.txt

# вывести города на "са"
sed -n '/^са/p' file.txt

# удалить пустые строки
sed '/^$/d' file.txt

# удалить все строки "посад"
sed '/посад/d' file.txt

# удалить все слова "посад" в строках
sed 's/посад//g' file.txt

# удалить все строки до первого "посад"
sed 1,'/посад/d' file.txt

# удалить все строки до первой пустой
sed 1,'/^$/d' file.txt

# заменить посад на ПОСАД
sed 's/посад/ПОСАД/' file.txt

# заменить только павлов посад на ПОСАД
sed '/павл/s/посад/ПОСАД/' file.txt

# в каждой строке заменить все "о" на "О"
sed 's/о/0/g' file.txt

# удалить все пробелы в конце строки
sed 's/ *$//' file.txt

Я не стал накручивать большие регулярные выражения - но это возможно
и легко, поскольку параметры основных команд sed (p,d,s,y) -
могут являться регулярными выражениями. Продолжаем изыскания:

# добавляем пустые строки
sed G file.txt

# удалить каждую третью строку
sed 'n;n;d' file.txt

# количество строк в файле
sed -n '$=' file.txt

# добавляем строки с номерами
sed = file.txt

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