====== Текстовые редакторы ed, sed, vi, vim ======
* [[https://youtu.be/r8e7F46un7A|Видео: Текстовые редакторы от ed до vim]]
===== Исходные файлы =====
$ cp /etc/passwd .
$ cp /etc/fstab .
$ cp /etc/ssh/sshd_config .
===== Редактор ed =====
[[http://ru.wikipedia.org/wiki/Ed]]
[[http://khpi-iip.mipk.kharkiv.edu/library/extent/os/usref/gl06.html]]
==== Начало редактирования ====
$ ed passwd
==== Команды просмотра текста ====
* p
* pn
* 5p
* 3,6p
* 1,$p
* %p
* %pn
==== Команды навигации по тексту ====
* 1
* $
* /root
* /
==== Команды редактирования текста ====
* 4d
* u
* 1,3d
* g/sh$/d
* 34,$g/^user/d
* 1i
* $a
* 5,7c
* .
* s/bin\/sh/bin\/bash/
* 30,33s/bin\/sh/bin\/bash/
* %s/bin\/sh/bin\/bash/
==== Команды окончания редактирования ====
* w
* q
===== Потоковый редактор sed =====
* [[http://ru.wikipedia.org/wiki/Sed|Sed wikipedia]]
* [[http://www.lissyara.su/doc/programming/sed/|ПОТОКОВЫЙ РЕДАКТОР sed]]
* [[https://habrahabr.ru/post/191006/|Шахматы на чистом sed]]
==== Формат команды ====
sed команды_редактирования [имя_файла]
$ sed '' passwd
$ sed -n '' passwd
==== Команда "p" - печать текста ====
$ sed -n '1p' /etc/passwd
$ sed -n -e '1p' -e '20,$p' /etc/passwd
==== Команда "a" вставка после, "i перед строкой и размещение команд редактирования в файле ====
$ cp /etc/passwd .
$ sed '1i\
Name:Pass:Uid:Gid:...
' passwd
$ sed '$a\
Name:Pass:Uid:Gid:...
' passwd
$ cat ex1.sed
$a\
Name:Pass:Uid:Gid:...
$ sed -f ex1.sed passwd
==== Команда редактирования "c" - замена строк и использование шаблона для выбора редактируемых строк ====
$ cp /etc/ssh/ssh_config .
$ sed '/^#/c\
# COMMENT
' ssh_config
==== Команда редактирования "d" - удаление строк, использование логических операторов и расширенных регулярных выражений ====
$ sed '10,$d' passwd
$ sed -e '/^$/d' -e '/^#/d' sshd_config
$ sed -e '/^$\|^#/d' sshd_config
$ sed -E -e '/^$|^#/d' sshd_config
==== Команда редактирования "s" замена элементов текста, использование классов символов и переменных в шаблонах ====
=== Linux/FreeBSD ===
$ df -h | sed -re 's/ {1,}/ /g' # see tr
$ sed 's/bin\/bash/bin\/sh/g' passwd
$ sed 's|bin/csh|bin/sh|g' passwd
=== FreeBSD ===
$ fetch http://garmoshki.ru/schools/gegart/gegart.htm
$ grep sound gegart.htm | sed -E 's/.*(sound.*mp3).*/fetch http:\/\/garmoshki.ru\/schools\/gegart\/\1/'
=== Linux ===
$ wget http://garmoshki.ru/schools/gegart/gegart.htm
$ grep sound gegart.htm | sed -E 's/.*(sound.*mp3).*/wget http:\/\/garmoshki.ru\/schools\/gegart\/\1/'
==== Аргумент "i" - непосредственное редактирование файла ====
$ sed -i.bak -e '/^$\|^#/d' ssh_config
$ sed -i -e '/swap/s/^/#/' fstab
===== Редактор vi, vim =====
* [[http://lib.ru/unixhelp/vibegin.txt|Редактор VI. Список команд]]
* [[http://lib.ru/unixhelp/vi.txt|Очень кратко о редакторе "VI"]]
==== Установка в FreeBSD ====
# pkg install vim-lite
==== Настройка ====
$ cat ~/.vimrc
debian# cat /usr/share/vim/vim*/defaults.vim
...
"set incsearch
set mouse-=a
syntax on
"filetype plugin indent on
==== Переключение режимов ====
ESC - переход в режим навигации и редактирования
ESC: - переход в режим ed
i или o - переход в режим вставки текста
==== Команды режима навигации и редактирования ====
=== Навигация по тексту ===
h - влево
l - вправо
k - вверх
j - вниз
-^ - на начало строки
-$ - на конец строки
-B - на страницу вверх
-F - на страницу вниз
g - на начало текста
G - на конец текста
-G - вывести отчет о редактируемом тексте
=== Поиск текста ===
/регулярное_выражение - поиск по тексту вниз
/\cрегулярное_выражение - поиск по тексту вниз без учета регистра
n - повтор поиска вниз
?регулярное_выражение - поиск по тексту вверх
N - повтор поиска вверх
=== Редактирование текста ===
i - ввод текста с текущей позиции
o - ввод текста с новой строки
J - склеить строки
x - удалить текст (DEL)
X - удалить текст (BACKSPACE)
yy - копировать строку в буфер
dd - вырезать строку в буфер
p - вставить строку из буфера
u - отменить последнее действие
==== Команды режима ed ====
w - запись файла
q - выход из редактора
w! - запись файла с без установленного бита записи
q! - выход из редактора без сохранения
номер_строки - перейти на указанную строку
1,.d - удалить строки с первой до текущей
g/шаблон/d - удалить строки, содержащие шаблон во всем тексте
1,20g/шаблон/d - удалить строки, содержащие шаблон c 1 по 20 строку
20,$s/шаблон/замена/ - произвести замены в тексте с 20 строки до конца
%s/шаблон/замена/ - произвести замены в тексте во всем файле. Пример: %s/^/shut\rint /
noh - очистить подсветку поиска
==== Редактирование файлов для Winodws ====
$ vim -c 'set ff=dos' cko-asterisk.ovpn
===== Дополнительные материалы =====
* [[https://www.grymoire.com/Unix/Sed.html|Sed - An Introduction and Tutorial by Bruce Barnett]]