SED — различия между версиями
Root (обсуждение | вклад) |
Root (обсуждение | вклад) |
||
Строка 26: | Строка 26: | ||
Замена шаблона в конкретной строке. В данном случае заменяет заданное слово только в третьей строке | Замена шаблона в конкретной строке. В данном случае заменяет заданное слово только в третьей строке | ||
sed '3 s/<font color=blue>unix</font>/<font color=red>linux</font>/' filename | sed '3 s/<font color=blue>unix</font>/<font color=red>linux</font>/' filename | ||
+ | |||
+ | |||
+ | Дублирование изменяемых строк | ||
+ | sed 's/<font color=blue>unix</font>/<font color=red>linux</font>/p' geekfile.txt | ||
+ | |||
В файле есть строчки:<br/> | В файле есть строчки:<br/> |
Версия 23:02, 31 мая 2022
Удалить строчку по шаблону
sed '/шаблон/d' filename
Заменить в строке ТЕКСТ1 на ТЕКСТ2. По умолчанию команда sed заменяет первое вхождение шаблона в каждой строке, не затрагивая второе, третье и т.д.(если в строке будет несколько текст1, то заменится только первый)
sed 's/текст1/текст2/' filename
Замена n-ого вхождения шаблона в строке. Вхождения, которые нужно заменить, обозначаются с помощью флагов /1, /2 и т.д.
sed 's/текст1/текст2/2' filename
Для замены всех без исключения вхождений заданного шаблона используется глобальный флаг /g
sed 's/текст1/текст2/g' filename
Замена всех вхождений шаблона в строке начиная с n-ого. Для этого номер вхождения, с которого нужно начать, сопровождается флагом g. Следующая команда заменит в каждой строке третье, четвёртое и т.д. вхождение
sed 's/текст1/текст2/3g' filename
Заключение первых символов слов в скобки
echo "Welcome To The Moscow" | sed 's/\(\b[A-Z]\)/\(\1\)/g' (W)elcome (T)o (T)he (M)oscow
Замена шаблона в конкретной строке. В данном случае заменяет заданное слово только в третьей строке
sed '3 s/unix/linux/' filename
Дублирование изменяемых строк
sed 's/unix/linux/p' geekfile.txt
В файле есть строчки:
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