SED — различия между версиями

Материал из megapuper
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
Удалить строчку по шаблону
 
Удалить строчку по шаблону
  sed '/шаблон/d' filename
+
  sed '/<font color=blue>шаблон</font>/d' filename
  
  
 
Заменить в строке ТЕКСТ1 на ТЕКСТ2
 
Заменить в строке ТЕКСТ1 на ТЕКСТ2
  sed 's/текст1/текст2/' filename
+
  sed 's/<font color=blue>текст1</font>/<font color=red>текст2</font>/' filename
  
 +
Замена n-ого вхождения шаблона в строке. Вхождения, которые нужно заменить, обозначаются с помощью флагов /1, /2 и т.д. К примеру, следующая команда заменит в каждой строке второе вхождение:
 +
sed 's/<font color=blue>текст1</font>/<font color=red>текст2</font>/2' filename
  
 
Заменить все встречающиеся совпадения
 
Заменить все встречающиеся совпадения

Версия 22:17, 31 мая 2022

Удалить строчку по шаблону

sed '/шаблон/d' filename


Заменить в строке ТЕКСТ1 на ТЕКСТ2

sed 's/текст1/текст2/' filename

Замена n-ого вхождения шаблона в строке. Вхождения, которые нужно заменить, обозначаются с помощью флагов /1, /2 и т.д. К примеру, следующая команда заменит в каждой строке второе вхождение:

sed 's/текст1/текст2/2' filename

Заменить все встречающиеся совпадения

sed 's/pattern/replacement/g' filename


В файле есть строчки:
ttyv0 "/usr/libexec/getty Pc"
ttyv1 "/usr/libexec/getty Pc"
...
ttyv8 "/usr/libexec/getty Pc"

Требуется поставить символ # перед всеми ttyv, кроме ttyv0:

sed 's/^ttyv[1-8]/#&/' /etc/ttys


Отслеживаем логи через tail -f. Для удобства отображения хотелось бы после каждой строки добавлять пустую строку. Надо в конце строки вставлять символ перевода строки \n. Якорем(метасимволом, квантификатором), обозначающим конец строки, в большинстве диалектов регулярных выражений обычно служит символ $:

tail -f access.log | sed 's/$/\n/'


Вывести определённую строку, в данном случае третью:

sed -n 3p