====== Текстовые редакторы 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]]