Added tasks for lesson 2.

pull/1/head
Vladimir Protsenko 2 years ago
parent 63e3d440f3
commit ccf8d6add7

@ -0,0 +1,756 @@
# =============================================================================== = Д о б р о п о ж а л о в а т ь в у ч е б н и к VIM -- версия 1.7 =
```
Vim -- это очень мощный редактор, имеющий множество команд, слишком много
для того, чтобы их все можно было описать в таком учебнике, как этот.
Этот учебник призван объяснить достаточное число команд для того, чтобы
вы могли с лёгкостью использовать Vim в качестве редактора общего
назначения.
Вам потребуется приблизительно 25-30 минут на освоение данного учебника в
зависимости от того, сколько времени вы потратите на эксперименты.
Внимание! Командами в уроках вы будете изменять этот текст. Создайте
копию этого файла, чтобы попрактиковаться на ней (если вы запустили
"vimtutor", то это уже копия).
Важно помнить, что этот учебник предназначен для обучения в процессе
использования. Это означает, что вы должны запускать команды для того,
чтобы как следует их изучить. Если вы просто прочитаете этот текст, то
не запомните команды!
Теперь убедитесь в том, что клавиша CapsLock не включена, и нажмите
клавишу j несколько раз, так, чтобы Урок 1.1 полностью поместился на
экране.
```
```
Урок 1.1: ПЕРЕМЕЩЕНИЕ КУРСОРА
** Для перемещения курсора нажмите клавиши h,j,k,l так, как показано ниже. **
^
k Советы: Клавиша h находится слева и перемещает влево.
< h l > Клавиша l находится справа и перемещает вправо.
j Клавиша j похожа на стрелку `вниз'.
v
1. Подвигайте курсор по экрану, пока не почувствуете себя уверенно.
2. Надавите клавишу `вниз' (j) пока она не начнёт повторяться.
Теперь вы знаете, как перейти к следующему уроку.
3. Используя клавишу `вниз' перейдите к Уроку 1.2.
Замечание! Если вы пока не уверены в том, что набираете, нажмите <ESC> для
перехода в обычный режим (Normal mode). После этого перенаберите
требуемую команду.
Замечание! Обычные клавиши управления курсором (стрелки) также должны
работать. Однако, клавиши hjkl позволят вам перемещаться
значительно быстрее, как только вы научитесь ими пользоваться.
```
```
Урок 1.2: ЗАВЕРШЕНИЕ РАБОТЫ С VIM
```
!! ВНИМАНИЕ! Прежде, чем выполнять любой из описанных ниже шагов, прочтите урок целиком !!
1. Нажмите клавишу <ESC> (для того, чтобы удостовериться, что вы в обычном режиме (Normal mode)).
2. Наберите: :q! <ENTER>. (Это означает, что вы должны набрать три символа :q! и нажать клавишу ввод.) Это позволит вам выйти из редактора БЕЗ СОХРАНЕНИЯ любых сделанных изменений.
3. Когда вы увидите приглашение командной оболочки, наберите команду, которая привела вас в этот учебник. Это может быть: vimtutor <ENTER>
4. Если вы уверены в том, что запомнили эти шаги, выполните шаги от 1 до 3 чтобы выйти и снова запустить редактор.
Замечание! :q! <ENTER> отбрасывает любые сделанные вами изменения. Через несколько уроков вы узнаете как сохранять изменения в файл.
1. Переместите курсор вниз к Уроку 1.3.
```
Урок 1.3: РЕДАКТИРОВАНИЕ ТЕКСТА -- УДАЛЕНИЕ
** Находясь в обычном режиме нажмите x для удаления символа под курсором. **
1. Переместите курсор к строке ниже, помеченной --->.
2. Для исправления ошибок, переместите курсор, пока он не окажется над
удаляемым символом.
3. Нажмите клавишу x для удаления требуемого символа.
4. Повторите шаги со 2 по 4 пока строка не будет исправлена.
---> От тттопота копытт пппыль ппо ппполю леттитт.
5. Теперь, когда строка откорректирована, переходите к Уроку 1.4.
Замечание! В ходе освоения этого учебника не пытайтесь запоминать, учите
в процессе использования.
```
```
Урок 1.4: РЕДАКТИРОВАНИЕ ТЕКСТА -- ВСТАВКА
** Находясь в обычном режиме, нажмите i для вставки текста. **
```
1. Переместите курсор к первой строке ниже, помеченной --->.
2. Для того, чтобы сделать первую строку идентичной второй, поместите курсор на символ ПЕРЕД которым следует вставить текст.
3. Нажмите i и наберите требуемые добавления.
4. После исправления всех ошибок нажмите <ESC> для возврата в обычный режим. Повторите шаги со 2 по 4, пока фраза не будет исправлена полностью.
\---> Часть текста в строке бесследно . ---> Часть текста в этой строке бесследно пропала.
1. Когда освоите вставку текста, переходите к Уроку 1.5.
```
Урок 1.5: РЕДАКТИРОВАНИЕ ТЕКСТА -- ДОБАВЛЕНИЕ
** Находясь в обычном режиме, нажмите A для добавления текста. **
1. Переместите курсор к первой строке ниже, помеченной --->.
Не имеет значения на каком символе расположен курсор на этой строке.
2. Нажмите A и наберите требуемые добавления.
3. После добавления требуемого текста нажмите <ESC> для возврата в обычный
режим.
4. Переместите курсор на следующую строку, помеченную ---> и повторите шаги
со 2 по 4 для исправления этой строки.
---> Часть текста в этой строке бессле
Часть текста в этой строке бесследно пропала.
---> Здесь также не достаёт час
Здесь также не достаёт части текста.
5. Когда освоите добавление текста, переходите к Уроку 1.6.
```
```
Урок 1.6: РЕДАКТИРОВАНИЕ ФАЙЛА
** Используйте :wq для сохранения файла и выхода из Vim. **
```
!! ВНИМАНИЕ! Прежде, чем выполнять любой из описанных ниже шагов, прочтите урок целиком !!
1. Выйдите из Vim, как вы это узнали в Уроке 1.2: :q! Или, если у вас есть доступ к другому терминалу, можете сделать следующее в нём.
2. По приглашению командной оболочки введите следующую команду: vim tutor <ENTER> `vim' -- команда для запуска редактора Vim, а `tutor' -- имя файла для редактирования. Используете имя файла, который можно изменять.
3. Вставляйте и удаляйте текст, как вы научились в предыдущих уроках.
4. Сохраните файл с изменениями и выйдите из Vim выполнив: :wq <ENTER>
5. Если вы вышли из vimtutor на шаге 1, перезапустите vimtutor и переходите к следующему Резюме.
```
РЕЗЮМЕ УРОКА 1
1. Курсор перемещается либо клавишами со стрелками, либо клавишами hjkl.
h (влево) j (вниз) k (вверх) l (вправо)
2. Для запуска Vim (из приглашения командной оболочки) наберите:
vim ИМЯ_ФАЙЛА <ENTER>
3. Для завершения работы с Vim наберите:
<ESC> :q! <ENTER> чтобы отказаться от сохранения изменений.
Или наберите:
<ESC> :wq <ENTER> чтобы сохранить изменения.
4. Для удаления символа под курсором в обычном режиме, нажмите: x
5. Чтобы вставить текст перед курсором в обычном режиме, наберите:
i вводите вставляемый текст <ESC>
Чтобы добавить текст после курсора:
a вводите добавляемый текст <ESC>
Замечание! Нажатие <ESC> переместит вас в обычный режим (Normal mode) либо
прервёт нежелательную и частично завершённую команду.
Теперь переходите к Уроку 2.
```
```
Урок 2.1: КОМАНДЫ УДАЛЕНИЯ
** Наберите dw для удаления участка текста до конца слова. **
```
1. Нажмите <ESC>, чтобы перейти в обычный режим.
2. Переместите курсор вниз, к строке помеченной --->.
3. Переместите курсор в начало слова, которое следует удалить.
4. Наберите dw для удаления этого слова.
Замечание! Во время набора буквы dw появятся справа в самой нижней строке экрана. Если вы что-то наберёте неправильно, нажмите <ESC> и начните сначала.
\---> Несколько слов рафинад в этом предложении автокран излишни.
1. Повторите шаги 3 и 4, пока не исправите все ошибки и переходите к Уроку 2.2.
```
Урок 2.2: ДОПОЛНИТЕЛЬНЫЕ КОМАНДЫ УДАЛЕНИЯ
** Наберите d$ для удаления текста до конца строки. **
1. Нажмите <ESC>, чтобы перейти в обычный режим.
2. Переместите курсор вниз, к строке помеченной --->.
3. Переместите курсор к концу правильной строки (ПОСЛЕ первой точки).
4. Наберите d$ для удаления остатка строки.
---> Кто-то набрал окончание этой строки дважды. окончание этой строки дважды.
5. Чтобы лучше разобраться в том, как это происходит, переходите к Уроку 2.3.
```
```
Урок 2.3: КОМАНДЫ И ОБЪЕКТЫ
```
Многие команды, изменяющие текст, состоят из оператора и объекта. Формат команды удаления с оператором d следующий:
```
d объект
```
Здесь: d - оператор удаления. объект - над чем должна быть выполнена команда (перечислено ниже).
Краткий список объектов: w - от курсора до конца слова, включая последующий пробел. e - от курсора до конца слова, НЕ включая последующий пробел. $ - от курсора до конца строки. ^ - от курсора до начала строки.
Замечание! Простое нажатие на символ объекта в обычном режиме (Normal mode) без предварительного оператора переместит курсор так, как указано в списке объектов.
```
Урок 2.4: ИСПОЛЬЗОВАНИЕ СЧЁТЧИКА ДЛЯ ПЕРЕМЕЩЕНИЯ
** Ввод числа перед оператором перемещения приведёт к его повторению
заданное количество раз. **
1. Переместите курсор к началу строки отмеченной ---> ниже.
2. Наберите 2w для перемещения курсора вперёд к началу второго слова.
3. Наберите 3e для перемещения курсора вперёд к концу третьего слова.
4. Наберите 0 (нуль) для перемещения к началу строки.
5. Повторите шаги 2 и 3 с различными числами.
---> Обычная строка из слов для вашего перемещения по ней.
6. Переходите к Уроку 2.5.
```
```
Урок 2.5: ИСПОЛЬЗОВАНИЕ СЧЁТЧИКА ДЛЯ УДАЛЕНИЯ
** Ввод числа перед оператором приведёт к его повторению
заданное количество раз. **
```
Добавьте число перед перед объектом в комбинацию оператора удаления и перемещения указанную выше для удаления указанного количества объектов: d число объект
1. Переместите курсор к первому слову из прописных букв в отмеченной ---> строке ниже.
2. Наберите d2w для удаления двух слов из прописных букв.
3. Повторите шаги 1 и 2 с другими числами для удаления последовательных слов из прописных букв одной командой.
\---> эта АБВ ГД строка ЕЖЗИ КЛ МНО из слов П РС ТУФ очищена.
```
Урок 2.6: ОПЕРАЦИИ СО СТРОКАМИ
** Наберите dd для удаления целой строки. **
В связи с частой необходимостью удаления целой строки, создатели Vi решили
для упрощения сделать возможным удаление строки набором двух d.
1. Переместите курсор вниз, ко второй строке фразы.
2. Наберите dd для удаления строки.
3. Теперь переместитесь к четвёртой строке.
4. Наберите 2dd для удаления двух строк.
---> 1) Летом я хожу на стадион,
---> 2) О, как внезапно кончился диван!
---> 3) Я болею за ``Зенит'', ``Зенит'' --- чемпион!
---> 4) Печально я гляжу на наше поколение!
---> 5) Его грядущее иль пусто иль темно...
---> 6) Я сижу на скамейке в ложе `Б'
---> 7) И играю на большой жестяной трубе.
```
```
Урок 2.7: КОМАНДА `ОТМЕНА'
```
\*\* Нажмите u для отмены результата работы предыдущей команды, U для отмены исправлений во всей строке. \*\*
1. Переместите курсор вниз, к строке помеченной --->, и установите его на первую ошибку.
2. Нажмите x для удаления первого неправильного символа.
3. Теперь нажмите u для отмены (отката) последней выполненной команды.
4. Исправьте все ошибки в строке, используя команду x .
5. Теперь нажмите заглавную U для того, чтобы вернуть всю строку в исходное состояние.
6. Нажмите u несколько раз для отмены команды U и предыдущих команд.
7. Нажмите теперь CTRL-R (т.е. удерживайте клавишу CTRL нажатой в момент нажатия клавиши R) несколько раз для возврата команд (откат отката). ---> Испрравьте оошибки в этойй строке и вернитте их сс помощьью \`отмены'.
8. Это были очень полезные команды. Далее переходите к Резюме Урока 2.
```
РЕЗЮМЕ УРОКА 2
1. Для удаления текста от курсора до конца слова наберите: dw
2. Для удаления текста от курсора до конца строки наберите: d$
3. Для удаления всей строки наберите: dd
4. Для повтора перемещения введите количество перед командой: 2w
5. Формат команды в обычном режиме имеет вид:
[число] команда объект ИЛИ команда [число] объект
где:
[число] - сколько раз повторить выполнение команды, опционально
команда - что выполнить, например d для удаления
объект - на что должна воздействовать команда, например w (слово),
$ (до конца строки), и т.д.
6. Для перехода к началу строки используйте нуль: 0
7. Для отмены (отката) предшествующих действий наберите: u (строчная u)
Для отмены (отката) всех изменений в строке наберите: U (прописная U)
Для отмены отката наберите: CTRL-R
```
```
Урок 3.1: КОМАНДА ВСТАВКИ
```
\*\* Наберите p для вставки последнего удалённого текста после курсора. \*\*
1. Переместите курсор вниз, к строке помеченной --->.
2. Наберите dd для удаления строки и её сохранения в буфере Vim'а.
3. Переместите курсор к строке НАД тем местом, куда следует вставить удалённую строку.
4. Находясь в обычном режиме наберите p для вставки строки ниже курсора.
5. Повторите шаги со 2 по 4, пока не расставите все строки в нужном порядке. ---> г) И лучше выдумать не мог. ---> б) Когда не в шутку занемог, ---> в) Он уважать себя заставил ---> а) Мой дядя самых честных правил
```
Урок 3.2: КОМАНДА ЗАМЕНЫ
** Наберите r и символ, заменяющий символ под курсором. **
1. Переместите курсор вниз, к строке помеченной --->.
2. Установите курсор так, чтобы он находился над первой ошибкой.
3. Наберите r и затем символ, исправляющий ошибку.
4. Повторите шаги 2 и 3, пока первая строка не будет исправлена как вторая.
---> В момегт набтра этой чтроки кое0кто с трудом попвдал по клваишам!
---> В момент набора этой строки кое-кто с трудом попадал по клавишам!
5. Теперь переходите к Уроку 3.3.
Замечание! Помните, что вы должны учиться в процессе работы, а не просто
запоминая.
```
```
Урок 3.3: КОМАНДА ИЗМЕНЕНИЯ
** Для изменения конечной части слова наберите ce . **
```
1. Переместите курсор вниз, к строке помеченной --->.
2. Расположите курсор над буквой `o' в слове `сола'.
3. Наберите ce и исправьте слово (в данном случае, наберите \`лов').
4. Нажмите <ESC> и переходите к следующей ошибке (к первому символу, который надо изменить).
5. Повторите шаги 3 и 4 пока первое предложение не станет идентичным второму.
\---> Несколько сола в эьгц строке тпгшцбь редалзкуюиесвх. ---> Несколько слов в этой строке требуют редактирования.
Обратите внимание, что ce не только удаляет слово, но и переводит вас в режим вставки.
```
Урок 3.4: ПРОДОЛЖАЕМ ИЗМЕНЯТЬ С КОМАНДОЙ c
** Команда замены используется с теми же объектами, что и команда удаления. **
1. Команда изменения применяется таким же образом, как и команда удаления.
Её формат таков:
[число] c объект ИЛИ c [число] объект
2. Объекты также совпадают: w (слово), $ (конец строки) и т.п.
3. Переместите курсор вниз, к строке помеченной --->.
4. Перейдите к первой ошибке.
5. Наберите c$ и отредактируйте первую строку так, чтобы она совпадала со
второй, после чего нажмите <ESC>.
---> Конец этой строки нуждается в помощи, чтобы стать похожим на второй.
---> Конец этой строки нуждается в помощи команды c$ .
Замечание! Клавиша Backspace может использоваться для исправления при наборе.
```
```
РЕЗЮМЕ УРОКА 3
```
1. Для вставки текста, который только что был удалён, наберите p . Эта команда вставит удалённый текст ПОСЛЕ курсора (если была удалена строка, то она будет помещена в строке под курсором).
2. Для замены символа под курсором наберите r и затем заменяющий символ.
3. Команда изменения позволяет вам изменить указанный объект от курсора до окончания перемещения. Например, наберите ce для замены от курсора до конца слова, c$ для изменения до конца строки.
4. Формат команды изменения таков:
[число] c объект ИЛИ c [число] объект
Теперь переходите к следующему уроку.
```
Урок 4.1: ИНФОРМАЦИЯ О ФАЙЛЕ И РАСПОЛОЖЕНИИ В НЕМ
** Наберите CTRL-g чтобы увидеть ваше месторасположение в файле и
информацию о файле. Наберите G (SHIFT-G) для перемещения к заданной
строке в файле. **
Замечание! Прочитайте весь урок прежде чем выполнять любые команды!
1. Удерживая клавишу Ctrl нажмите g . Внизу экрана появится строка статуса
с именем файла и номером строки, в которой вы находитесь. Запомните номер
строки, он потребуется на Шаге 3.
2. Удерживая клавишу Shift нажмите g для перемещения к концу файла.
3. Наберите номер строки, в которой вы находились и затем Shift-G. Это
вернёт вас к строке, в которой вы были, когда в первый раз нажали Ctrl-g.
4. Если вы запомнили все вышесказанное, выполните шаги с 1 по 3.
```
```
Урок 4.2: КОМАНДА ПОИСКА
** Наберите / и затем введите искомую фразу. **
```
1. В обычном режиме (Normal mode) наберите символ / . Обратите внимание, что он вместе с курсором появится внизу экрана, как это происходит с командой : .
2. Теперь наберите 'ошшшибка' <ENTER>. Это то слово, которое вы будете искать.
3. Для того, чтобы повторить поиск, просто нажмите n . Для поиска этой же фразы в обратном направлении, нажмите Shift-N .
4. Если вы желаете сразу искать в обратном направлении, используйте команду ? вместо / .
5. Для того, чтобы вернуться туда, откуда вы начали поиск нажмите Ctrl-O. (Удерживая нажатой клавишу Ctrl нажмите o ). Повторите несколько раз для дальнейшего перехода. Для перехода вперёд используйте Ctrl-I .
\---> "ошшшибка" это не способ написания слова \`ошибка'; ошшшибка это ошибка. Замечание! Если при поиске будет достигнут конец файла, то поиск будет продолжен с начала.
```
Урок 4.3: ПОИСК ПАРНЫХ СКОБОК
** Наберите % для поиска парных ), ] или } . **
1. Поместите курсор над любой из (, [ или { в строке ниже, помеченной --->.
2. Теперь наберите символ % .
3. Курсор должен перескочить на парную скобку.
4. Наберите % для возврата курсора назад к первой скобке.
---> Это ( строка, содержащая такие (, такие [ ] и такие { } скобки. ))
Замечание! Это очень удобно при отладке программ с пропущенными скобками!
```
```
Урок 4.4: СПОСОБ ИСПРАВЛЕНИЯ ОШИБОК
** Наберите :s/было/стало/g для замены 'было' на 'стало'. **
```
1. Переместите курсор вниз, к строке помеченной --->.
2. Наберите :s/уводю/увожу <ENTER> . Обратите внимание на то, что эта команда заменит только первое найденное вхождение в строке.
3. Теперь наберите :s/уводю/увожу/g , добавленная в конце g означает подстановку глобально во всей строке. Это заменит все найденные в строке вхождения. ---> Я уводю к отверженным селеньям, я уводю сквозь вековечный стон, я уводю к забытым поколеньям.
4. Для замены всех вхождений последовательности символов между двумя строками, наберите :#,#s/было/стало/g где #,# -- номера этих строк. Наберите :%s/было/стало/g для замены всех вхождений во всем файле. Наберите :%s/было/стало/gc для поиска всех вхождений во всем файле и запроса подтверждения замены.
```
РЕЗЮМЕ УРОКА 4
1. Ctrl-g показывает ваше положение в файле и информацию о нем.
Shift-G перемещает вас в конец файла. Номер, за которым следует Shift-G
позволяет перейти к строке с этим номером.
gg перемещает вас к первой строке файла.
2. Нажатие / и затем ввод строки позволяет произвести поиск этой строки
ВПЕРЁД по тексту.
Нажатие ? и затем ввод строки позволяет произвести поиск этой строки
НАЗАД по тексту.
После поиска наберите n для перехода к следующему вхождению искомой
строки в том же направлении или Shift-N для перехода в противоположном
направлении.
3. Нажатие % , когда курсор находится на (,),[,],{, или } позволяет найти
парную скобку.
4. Для подстановки `стало' вместо первого `было' в строке, наберите
:s/было/стало
Для подстановки `стало' вместо всех `было' в строке, наберите
:s/было/стало/g
Для замены в интервале между двумя строками, наберите
:#,#s/было/стало/g
Для замены всех вхождений `было' на `стало' в файле, наберите
:%s/было/стало/g
Чтобы редактор каждый раз запрашивал подтверждение, добавьте 'c'
:%s/было/стало/gc
```
```
Урок 5.1: КАК ВЫПОЛНИТЬ ВНЕШНЮЮ КОМАНДУ
** Наберите :! и затем внешнюю команду, которую следует выполнить. **
```
1. Наберите уже знакомую вам команду : для установки курсора в командную строку редактора. Это позволит вам ввести команду.
2. Теперь наберите символ ! (восклицательный знак). Это позволит выполнить внешнюю команду, используя командную оболочку.
3. Для примера наберите ls после ! и нажмите <ENTER>. Команда выведет список файлов в текущем каталоге, точно также, как если бы вы ввели эту команду в приглашении оболочки. Или попробуйте :!dir , если команда ls не сработала. Замечание! Таким способом можно выполнить любую внешнюю команду с указанием аргументов. Замечание! Все команды, начинающиеся с : , должны завершаться нажатием <ENTER>. Далее на это не всегда будет обращаться особое внимание.
```
Урок 5.2: КАК ЗАПИСАТЬ ФАЙЛ
** Для сохранения изменений, произведённых в файле,
наберите :w ИМЯ_ФАЙЛА. **
1. Наберите :!dir или :!ls для получения списка файлов в текущем
каталоге. Как вам уже известно, после ввода команды надо нажать <ENTER>.
2. Придумайте название для файла, которое ещё не существует, например TEST.
3. Теперь наберите :w TEST (где TEST -- это имя файла, придуманное вами.)
4. Команда сохранит весь этот файл (Учебник по Vim) под именем TEST. Чтобы
удостовериться в этом, снова наберите :!dir или :!ls и просмотрите
каталог.
Замечание! Если вы выйдете из Vim и затем запустите его снова с файлом TEST
(т.е. выполните vim TEST ), этот файл будет точной копией учебника
в тот момент, когда вы его сохранили.
5. Теперь удалите этот файл, набрав для MS-DOS :!del TEST
для Unix :!rm TEST
```
```
Урок 5.3: ВЫБОРОЧНОЕ СОХРАНЕНИЕ
** Для сохранения части файла, наберите v выберите часть
и сохраните её :w ИМЯ_ФАЙЛА **
```
1. Переместите курсор к этой строке.
2. Нажмите v и переместите курсор ниже к пятому шагу. Обратите внимание, что текст подсвечен.
3. Нажмите : и внизу экрана появится :'<,'> .
4. Введите w TEST (где TEST -- имя файла, который ещё не существует). До нажатия <ENTER>, проверьте что внизу экрана написано :'<,'>w TEST.
5. Vim запишет выбранные строки в файл TEST. Как и прежде, убедитесь в наличии этого файла командой :!dir или :!ls . НЕ УДАЛЯЙТЕ этот файл, он потребуется в следующем уроке. Замечание! Нажатие v начинает визуальный выбор. Вы можете перемещать курсор для изменения выбора. Затем для выбранного фрагмента можно выполнить какой-то оператор, например, удалить нажатием d.
```
Урок 5.4: ЧТЕНИЕ И ОБЪЕДИНЕНИЕ ФАЙЛОВ
** Для вставки содержимого из файла, наберите :r ИМЯ_ФАЙЛА **
1. Установите курсор над этой строкой.
Замечание! После выполнения Шага 2 вы увидите текст из Урока 5.3. Переместитесь
ВНИЗ по тексту до этого урока.
2. Теперь прочитайте ваш файл TEST, используя команду :r TEST , где TEST --
это имя файла.
3. Для проверки что содержимое файла было вставлено, переместитесь по тексту
и удостоверьтесь, что теперь в нём две копии Урока 5.3: исходная и из
файла TEST.
Замечание! Вставить можно и вывод внешней команды. Например, :r !ls прочитает
вывод команды ls и вставит его ниже курсора.
```
```
РЕЗЮМЕ УРОКА 5
```
1. \:!команда исполняет внешнюю команду. Некоторые полезные примеры: (MS-DOS) (Unix) :!dir :!ls -- вывести список файлов в каталоге. :!del ИМЯ :!rm ИМЯ -- удалить файл по имени.
2. \:w ИМЯ\_ФАЙЛА записывает текущий редактируемый в Vim файл на диск под указанным именем.
3. v перемещение :w ИМЯ\_ФАЙЛА сохраняет визуально выбранные строки в файл с указанным именем.
4. \:r ИМЯ\_ФАЙЛА считывает с диска файл с указанным именем и помещает его ниже курсора.
5. \:r !dir читает вывод команды dir и помещает его ниже курсора.
```
Урок 6.1: КОМАНДА СОЗДАНИЯ
** Наберите o чтобы создать пустую строку под курсором и перейти в режим
вставки (Insert mode) **
1. Переместите курсор вниз, к строке помеченной --->.
2. Наберите o (в нижнем регистре) для того, чтобы создать пустую строку
НИЖЕ курсора и перейти в режим вставки (Insert mode).
3. Теперь наберите какой-нибудь текст и нажмите <ESC> для выхода из режима
вставки.
---> После нажатия o курсор перейдёт на новую пустую строку в режиме вставки.
4. Для создания строки ВЫШЕ курсора, просто наберите заглавную O , вместо
строчной o . Попробуйте проделать это с нижеследующей строкой.
---> Создайте новую строку над этой, поместив на неё курсор и нажав Shift-O.
```
```
Урок 6.2: КОМАНДА ДОБАВЛЕНИЯ
** Наберите a , чтобы вставить текст ПОСЛЕ курсора. **
```
1. Переместите курсор вниз, в начало первой строки помеченной --->.
2. Набирайте e пока курсор не переместиться на конец cтро .
3. Наберите a (в нижнем регистре) для добавления текста ПОСЛЕ символа, находящегося под курсором. (Заглавная A позволяет добавить в конец строки.)
4. Допишите слово так, как показано в строке ниже. Нажмите <ESC> для выхода из режима вставки (Insert mode).
5. Используйте e для перехода к концу следующего незавершённого слова и повторите шаги 3 и 4. ---> Эта стро позволит вам попрактиков в добавле текста. ---> Эта строчка позволит вам попрактиковаться в добавлении текста. Замечание! a , i и A переводят в один и тот же режим вставки, различие только в том, где вставляются символы.
```
Урок 6.3: ЕЩЁ ОДИН СПОСОБ ЗАМЕНЫ
** Наберите заглавную R для замены более чем одного символа. **
1. Переместите курсор вниз, к первой строке помеченной --->, и в начало
первого слова xxx.
2. Теперь нажмите R и введите число, указанное ниже во второй строке, чтобы
заменить xxx.
3. Нажмите <ESC> для выхода из режима замены. Заметьте, что остаток строки
не был изменён.
4. Повторите эти шаги для замены оставшихся xxx.
---> Добавление 123 к xxx даёт xxx.
---> Добавление 123 к 456 даёт 579.
Замечание! Режим замены похож на режим вставки, но каждый введённый символ
удаляет существующий.
```
```
Урок 6.4: КОПИРОВАНИЕ И ВСТАВКА ТЕКСТА
** Используйте команду y для копирования и p для вставки **
```
1. Переместите курсор вниз, к первой строке помеченной --->, и после \`а)'.
2. Переключитесь в режим визуального выбора нажав v и переместите курсор перед словом \`первый'.
3. Введите y для копирования подсвеченного текста.
4. Переместите курсор в конец следующей строки комбинацией j$ .
5. Нажмите p для вставки текста. Затем введите \`второй' и нажмите <ESC>. ---> а) Этот элемент первый. б) Замечание! Также возможно использовать yw (команду y с оператором w ) для копирования одного слова.
```
Урок 6.5: УСТАНОВКА ПАРАМЕТРОВ
** Установка параметра для игнорирования регистра при поиске или замене **
1. Найдите слово `игнорировать', набрав: /игнорировать <ENTER>.
Повторите поиск несколько раз, нажимая клавишу n .
2. Установите параметр `ic' (игнорировать регистр), набрав: :set ic
3. Теперь снова несколько раз сделайте поиск слова `игнорировать',
нажимая: n
Заметьте, что теперь находятся `Игнорировать' и `ИГНОРИРОВАТЬ'.
4. Установите параметры `hlsearch' и `incsearch': :set hls is
5. Теперь опять введите команду поиска и посмотрите, что получится:
/игнорировать <ENTER>
6. Для возвращения учёта регистра при поиске наберите: :set noic
Замечание! Для отключения подсветки совпадений наберите: :nohlsearch
Замечание! Если вы хотите игнорировать регистр только для одного поиска,
используйте \с в команде поиска: /игнорировать\c <ENTER>
```
```
РЕЗЮМЕ УРОКА 6
```
1. Нажмите o для создания строки НИЖЕ курсора и перехода в режим вставки. Нажмите O для создания строки ВЫШЕ курсора.
2. Нажмите a для вставки текста ПОСЛЕ курсора. Нажмите A для вставки текста в конец строки.
3. Команда e подводит курсор к концу слова.
4. Команда y копирует текст, p -- вставляет скопированный текст.
5. Нажатие заглавной R переводит в режим замены до нажатия клавиши <ESC> .
6. Наберите `:set xxx' для включения параметра `xxx', некоторые параметры: `ic' `ignorecase' игнорирование регистра при поиске `is' `incsearch' отображение частичных совпадений при поиске `hls' `hlsearch' подсветка всех совпадений при поиске
7. Добавьте \`no' перед параметром для его отключения: :set noic
```
Урок 7.1: ВСТРОЕННАЯ СПРАВКА
** Используйте встроенную справочную систему **
Vim обладает мощной встроенной справочной системой. Для начала попробуйте
один из трёх вариантов:
- нажмите клавишу <HELP> (если таковая имеется на клавиатуре)
- нажмите клавишу <F1> (если таковая имеется на клавиатуре)
- наберите :help <ENTER>
Прочитайте текст в окне справки для получения представления о том как
работает справка.
Нажмите CTRL-W CTRL-W для перехода от окна к окну.
Наберите :q <ENTER> чтобы закрыть окно справки.
Вы можете найти справку для любого понятия или команды, задав соответствующий
аргумент команде `:help'. Попробуйте следующее (не забудьте нажать <ENTER>):
:help w
:help c_CTRL-D
:help insert-index
:help user-manual
```
```
Урок 7.2: СОЗДАНИЕ СТАРТОВОГО СЦЕНАРИЯ
** Включим возможности Vim **
```
Vim имеет намного больше возможностей, чем Vi, но большинство из них по умолчанию выключены. Для использования больших возможностей вам следует создать файл \`vimrc'.
1. Отредактируйте новый файл \`vimrc'. Его расположение зависит от используемой системы: :e \~/.vimrc для Unix :e \~/\_vimrc для MS-Windows
2. Теперь прочитайте пример файла \`vimrc': :r $VIMRUNTIME/vimrc_example.vim
3. Запишите созданный вами новый файл \`vimrc': :w
Теперь при следующем запуске Vim будет включена подсветка синтаксиса. Все настройки, предпочитаемые вами, могут быть добавлены в файл \`vimrc'. Для дальнейшей информации наберите :help vimrc-intro
```
Урок 7.3: ДОПОЛНЕНИЕ
** Командную строку можно дополнить нажав CTRL-D и <TAB> **
1. Удостоверьтесь, что Vim не в режиме совместимости: :set nocp
2. Посмотрите какие файлы есть в каталоге: :!ls или :!dir
3. Наберите начало команды: :e
4. Нажмите CTRL-D и Vim отобразит список команд начинающихся на `e'.
5. Нажмите <TAB> и Vim дополнит название команды до `:edit'.
6. Теперь добавьте пробел и начало существующего имени файла: :edit ФАЙ
7. Нажмите <TAB> и Vim дополнит имя файла, если оно уникальное.
Замечание! Дополнение работает для многих команд. Попробуйте нажать CTRL-D и
<TAB>. Это особенно полезно для команды :help .
```
```
РЕЗЮМЕ УРОКА 7
```
1. Наберите :help или нажмите <F1>, или <Help> для открытия окна справки.
2. Наберите :help cmd для поиска справки по команде.
3. Нажмите CTRL-W CTRL-W для перехода к другому окну.
4. Наберите :q для закрытия окна справки (если оно активно).
5. Для хранения ваших настроек создайте стартовый сценарий \`vimrc'.
6. При наборе : команды, нажмите CTRL-D для отображения возможных дополнений. Нажмите <TAB> для использования дополнения.
```
На этом завершается Учебник Vim. Он был предназначен дать общее представление
о редакторе Vim, достаточное для того, чтобы с лёгкостью использовать его.
Учебник далёк от полноты, поскольку Vim имеет очень много команд. Прочитайте
теперь руководство пользователя: `:help user-manual'.
Для дальнейшего чтения рекомендуется книга:
Vim - Vi Improved, автор: Steve Oualline, издатель: New Riders
Эта книга полностью посвящена Vim. Особенно полезна она будет новичкам.
Содержит множество примеров и иллюстраций.
См. https://iccf-holland.org/click5.html
Следующая книга более почтенного возраста и посвящена больше Vi, чем Vim,
однако также рекомендуется:
Learning the Vi Editor, автор: Linda Lamb,
издатель: O'Reilly & Associates Inc.
Это хорошая книга, чтобы узнать всё, что только можно сделать в Vi. Шестое
издание также включает информацию о Vim.
Этот учебник написал Michael C. Pierce и Robert K. Ware, Colorado School of
Mines с использованием идей, которые предложил Charles Smith, Colorado State
University. E-mail: bware@mines.colorado.edu.
Доработано для Vim Брамом Моленаром (Bram Moolenaar).
Перевод:
Андрей Киселев <a_kissel@eudoramail.com>, 2002.
Сергей Алёшин <alyoshin.s@gmail.com>, 2014.
Translators:
Andrey Kiselev <a_kissel@eudoramail.com>, 2002.
Sergey Alyoshin <alyoshin.s@gmail.com>, 2014.
```

@ -0,0 +1,511 @@
Добро пожаловать в задания https://regexone.com!
Уроки переведены и адаптированы под выполнение в vim.
## Урок 0: Введение и азбука
Регулярные выражения чрезвычайно полезны при извлечении информации из текста,
такого как код, файлы журналов, электронные таблицы или даже документы. И хотя
за формальными языками стоит много теории, в следующих уроках и примерах будут
рассмотрены более практические способы использования регулярных выражений, чтобы
вы могли использовать их на практике как можно быстрее.
Первое, что нужно понять при использовании регулярных выражений, это то, что все
по сути является символом, и мы пишем шаблоны для соответствия определенной
последовательности символов (также известной как строка). В большинстве шаблонов
используется обычный ASCII, который включает в себя буквы, цифры, знаки
препинания и другие символы на клавиатуре, такие как %#$@!, но символы Unicode
также могут использоваться для соответствия любому типу международного текста.
Включите инкрементальный поиск и подсветку найденных строк.
```
: set hls is
```
Перейдите в режим поиск из нормального режима vim нажав /. Попробуйте найти
слово "abc". Обратите внимание, как текст подсвечивается, чтобы выделить
совпадающие символы в каждой строке. Каждый урок будет расширять ваши знания
синтаксиса регулярных выражений. Вашей задачей будет написать шаблон, который
соответствует всем строкам урока, которые помечены слово "найдите". Строки
отмеченные словом "пропустите" не должны находится. В заданиях на замены
результатом должны быть новая строка.
Попробуйте написать шаблон, который соответствует всем трем строкам, это может
быть так же просто, как общие буквы в каждой строке.
Упражнение 1. Сопоставление символов
```
найдите abcdefg
найдите abcde
найдите abc
```
---
## Урок 1½: 123-е
Символы включают в себя обычные буквы, но также и цифры. На самом деле числа 0-9
тоже просто символы, и если вы посмотрите на таблицу ASCII, то увидите, что они
перечислены последовательно.
На различных уроках вы познакомитесь с рядом специальных метасимволов,
используемых в регулярных выражениях, которые можно использовать для
сопоставления определенного типа символов. В этом случае символ \d можно
использовать вместо любой цифры от 0 до 9. Предыдущий слеш отличает его от
простого символа d и указывает, что это метасимвол.
Ниже приведены еще несколько строк текста, содержащих цифры. Попробуйте написать
шаблон, который соответствует всем цифрам в приведенных ниже строках, и обратите
внимание, как ваш шаблон совпадает в любом месте строки, а не только начиная с
первого символа. Мы узнаем, как ограничивать поиск началом или концом строки
в одном из следующих уроках.
Упражнение 1½: Сопоставление цифр
```
найдите цифры в abc123xyz
найдите цифры в define "123"
найдите цифры в var g = 123;
```
---
## Урок 2: Точка
В некоторых карточных играх Джокер является специальной картой, которая может
выполнять роль любой другой карты в колоде. С помощью регулярных выражений вы
часто сопоставляете фрагменты текста, точное содержание которых неизвестно, за
исключением того факта, что они имеют общий шаблон или структуру (например,
номера телефонов или почтовые индексы).
Точно так же существует понятие подстановочного знака, которое представлено
расширением . (точка) метасимвол и может соответствовать любому одиночному
символу (букве, цифре, пробелу и т. д.). Вы можете заметить, что это фактически
отменяет шаблон самого символа точки, поэтому для точного соответствия точке вам
нужно использовать экранирующий символ - обратный слеш.
Ниже приведена пара строк с разными символами, но одинаковой длины. Попробуйте
написать один шаблон, который может соответствовать первым трем строкам, но не
последней.
Упражнение 2. Сопоставление с подстановочными знаками
```
найдите cat.
найдите 896.
найдите ?=+.
пропустите abc1
```
---
## Урок 3. Соответствие определенным символам
Метасимвол точки из прошлого урока довольно мощный, но иногда слишком мощный.
Например, если мы сопоставляем номера телефонов, мы не хотим проверять буквы
«(abc) def-ghij» как действительные числа!
Существует метод сопоставления определенных символов с использованием регулярных
выражений путем перечисления их в квадратных скобках. Например, шаблон [abc]
будет соответствовать одной из букв a, b или c и ничему другому.
Ниже приведена пара строк, где мы хотим сопоставить только первые три строки.
Обратите внимание, что мы не можем избежать сопоставления последних трех строк,
если используем точку. Мы должны конкретно определить, какие буквы
соответствуют шаблону, используя приведенную выше нотацию.
Упражнение 3. Сопоставление символов
```
найдите can
найдите man
найдите fan
пропуститe dan
пропуститe ran
пропуститe pan
```
---
## Урок 4. Исключение определенных символов
В некоторых случаях мы можем знать, что есть определенные символы, которые мы не
хотим находить. Например, мы можем захотеть сопоставлять только телефонные
номера, которые не относятся к коду города 650.
Чтобы выразить это, мы используем аналогичное выражение, которое исключает
определенные символы, используя квадратные скобки и символ карет ^. Например,
шаблон [^abc] будет соответствовать любому отдельному символу, кроме букв a, b
или c.
С приведенными ниже строками попробуйте написать шаблон, который соответствует
только животным (свинья, собака), но не болоту. Обратите внимание, что
большинство шаблонов этого типа также можно написать, используя технику из
прошлого урока, поскольку они на самом деле являются двумя сторонами одной
медали. Имея оба варианта, вы можете решить, какой из них легче написать и
понять при составлении собственных шаблонов.
Упражнение 4. Исключение символов
```
найдите hog
найдите dog
пропустите bog
```
---
## Урок 5: Диапазоны символов
Мы только что узнали, как создать шаблон, который соответствует или исключает
определенные символы, но что, если мы хотим сопоставить символ, который может
находиться в последовательном диапазоне символов? У нас нет другого выбора,
кроме как перечислить их все?
К счастью, при использовании нотации с квадратными скобками есть сокращение для
сопоставления символа в списке последовательных символов с использованием тире
для обозначения диапазона символов. Например, шаблон [0-6] будет соответствовать
только любому однозначному символу от нуля до шести, и никакому другому.
Аналогично, [^n-p] будет соответствовать только одному символу, кроме букв от n
до p.
В одном и том же наборе квадратных скобок можно использовать несколько
диапазонов символов вместе с отдельными символами. Примером этого является
буквенно-цифровой метасимвол \\w, который эквивалентен диапазону символов
[A-Za-z0-9\_] и часто используется для сопоставления символов в английском
тексте.
В приведенном ниже упражнении обратите внимание на то, что все совпадающие и
пропускаемые строки имеют шаблон, и используйте обозначение в квадратных
скобках, чтобы сопоставить или пропустить каждый символ в каждой строке. Имейте
в виду, что шаблоны чувствительны к регистру, а az отличается от AZ с точки
зрения символов, которым он соответствует (нижний или верхний регистр).
Упражнение 5. Сопоставление диапазонов символов
```
найдите Ana
найдите Bob
найдите Cpc
пропуститe aax
пропуститe bby
пропуститe ccz
```
---
## Урок 6: Ловля zzz
Примечание. Некоторые части приведенного ниже синтаксиса повторения
поддерживаются не во всех реализациях регулярных выражений.
До сих пор мы узнали, как указать диапазон символов, которые мы хотим
сопоставить, но как насчет количества повторений символов, которые мы хотим
сопоставить? Один из способов сделать это — явно указать, сколько именно
символов мы хотим, например. \\d\\d\\d, который будет соответствовать ровно трем
цифрам.
Более удобный способ — указать, сколько повторений каждого символа мы хотим,
используя нотацию фигурных скобок. Например, a{3} будет соответствовать символу
a ровно три раза. Некоторые механизмы регулярных выражений даже позволяют вам
указать диапазон для этого повторения, так что {1,3} будет соответствовать
символу a не более 3 раз, но, например, не менее одного раза.
Этот квантификатор можно использовать с любым символом или специальными
метасимволами, например w{3} (три w), [wxy]{5} (пять символов, каждый из которых
может быть w, x или y) и .{2. ,6} (от двух до шести любых символов).
В приведенных ниже строках последняя строка, содержащая только одну букву z, не
соответствует правильному написанию сленгового выражения «wazzup?». Попробуйте
написать шаблон, который соответствует только первым двум вариантам написания,
используя фигурные скобки выше.
Упражнение 6. Сопоставление повторяющихся символов
```
найдите wazzzzzup
найдите wazzzup
пропустите wazup
```
---
## Урок 7: Мистер Клини, мистер Клини
Мощной концепцией регулярных выражений является возможность сопоставлять
произвольное количество символов. Например, представьте, что вы написали форму с
полем для пожертвований, которое принимает числовое значение в долларах.
Состоятельный пользователь может зайти и захотеть пожертвовать 25 000 долларов,
в то время как обычный пользователь может захотеть пожертвовать 25 долларов.
Одним из способов выражения такого шаблона было бы использование того, что
известно как звезда Клини и плюс Клини, которые по существу представляют либо 0
или более, либо 1 или более символов, за которыми он следует (он всегда следует
за символом или группой). Например, чтобы сопоставить перечисленные выше
пожертвования, мы можем использовать шаблон \d* для сопоставления любого
количества цифр, но более строгим регулярным выражением будет \d+, которое
гарантирует, что входная строка содержит хотя бы одну цифру.
Эти квантификаторы можно использовать с любым символом или специальными
метасимволами, например, a+ (один или несколько символов a), [abc]+ (один или
несколько любых символов a, b или c) и .* (ноль или более любых символов). ).
Ниже приведены несколько простых строк, которые можно сопоставить, используя
метасимволы звездочки и плюса.
Упражнение 7. Сопоставление повторяющихся символов
```
найдите aaaabcc
найдите aabbbbc
найдите aacc
пропустите a
```
---
## Урок 8: Необязательные символы
Как вы видели, звездочка Клини и плюс позволяют нам сопоставлять повторяющиеся
символы в строке.
Другой квантификатор, который действительно часто используется при сопоставлении
и извлечении текста, — это ? (вопросительный знак) метасимвол, обозначающий
опциональность. Этот метасимвол позволяет вам сопоставить либо ноль, либо один
из предшествующих символов или групп. Например, шаблон ab?c будет
соответствовать либо строкам «abc», либо «ac», поскольку b считается
необязательным.
Подобно метасимволу точки, вопросительный знак является специальным символом, и
вам придется экранировать его, используя косую черту ? чтобы соответствовать
простому символу вопросительного знака в строке.
В приведенных ниже строках обратите внимание, как множественность слова «file»
зависит от количества найденных файлов. Попробуйте написать шаблон, который
использует метасимвол опциональности для соответствия только строкам, в которых
был найден один или несколько файлов.
Упражнение 8. Сопоставление необязательных символов
```
найдите 1 file found?
найдите 2 files found?
найдите 24 files found?
пропустите No files found.
```
---
## Урок 9: Все эти пробелы
При работе с реальным вводом, таким как файлы журналов и даже пользовательский
ввод, трудно не столкнуться с пробелами. Мы используем их для форматирования
фрагментов информации, чтобы ее было легче читать и просматривать визуально, а
один пробел может испортить простейшее регулярное выражение.
Наиболее распространенными формами пробелов, которые вы будете использовать с
регулярными выражениями, являются пробел ( ), табуляция (\t), новая строка
(\n) и возврат каретки (\r) (полезно в средах Windows). специальные символы
соответствуют каждому из соответствующих им пробелов. Кроме того, специальный
символ пробела \s будет соответствовать любому из указанных выше пробелов и
чрезвычайно полезен при работе с необработанным входным текстом (не в Vim,
используйте пробел).
В приведенных ниже строках вы обнаружите, что содержимое каждой строки отделено
некоторым пробелом от индекса строки (число является частью текста для
соответствия). Попробуйте написать шаблон, который может сопоставлять каждую
строку, содержащую пробельные символы между числом и содержимым. Обратите
внимание, что пробельные символы аналогичны любым другим символам, а также могут
использоваться специальные метасимволы, такие как звездочка и плюс.
Упражнение 9: сопоставление пробелов
```
найдите 1. abc
найдите 2. abc
найдите 3. abc
пропустите 4.abc
```
---
## Урок 10: Начало и конец строки
До сих пор мы писали регулярные выражения, которые частично соответствуют
фрагментам всего текста. Иногда это нежелательно, представьте, например, что мы
хотим сопоставить слово «success» в файле журнала. Мы, конечно же, не хотим,
чтобы этот шаблон соответствовал строке с надписью «Error: unsuccessful
operation»! Вот почему часто рекомендуется писать как можно более конкретные
регулярные выражения, чтобы гарантировать, что мы не получим ложных срабатываний
при сопоставлении с реальным текстом.
Один из способов сузить шаблоны — определить шаблон, описывающий начало и конец
строки с помощью специальных метасимволов ^ (карет) и $ (знак доллара). В
приведенном выше примере мы можем использовать шаблон ^success для соответствия
только строке, начинающейся со слова «success», но не строке «Error:
unsuccessful operation». А если вы объедините и карет, и знак доллара, вы
создадите шаблон, которому соответствует вся строка от начала и до конца.
Обратите внимание, что это отличается от карет, используемой внутри набора
квадратных скобок [^...] для исключения символов, что может сбивать с толку при
чтении регулярных выражений.
Попробуйте сопоставить каждую из приведенных ниже строк, используя новые
специальные символы.
Упражнение 10. Сопоставление линий
```
найдите
Mission: successful
пропустите
Last Mission: unsuccessful
пропустите
Next Mission: successful upon capture of target
```
---
## Урок 11: Сопоставление групп
Регулярные выражения позволяют нам не только сопоставлять текст, но и извлекать
информацию для дальнейшей обработки. Это делается путем определения групп
символов и их захвата с помощью специальных скобок ( и ) метасимволов. Любой
подшаблон внутри пары круглых скобок будет захвачен как группа. На практике это
можно использовать для извлечения такой информации, как номера телефонов или
электронные письма, из всех видов данных.
Представьте, например, что у вас есть инструмент командной строки для вывода
списка всех файлов изображений, которые у вас хранятся в облаке. Затем вы можете
использовать шаблон ^(IMG\d+.png)$, чтобы найти и извлечь полное имя файла, но
если вы хотите захватить только имя файла без расширения, вы можете использовать
шаблон ^(IMG\d+) .png$, который захватывает только часть до точки.
Продолжайте и попробуйте использовать группы, для регулярного выражения, которое
соответствует только именам файлов pdf (без расширения).
В Vim используйте команду ":%s/шаблон/замена/g" для выполнения упражнения.
В Vim cкобки групп экранируются \(\).
Упражнение 11. Сопоставление групп
```
найдите группу file_record_transcript в file_record_transcript.pdf
найдите группу file_07241999 в file_07241999.pdf
пропустите testfile_fake.pdf.tmp
```
---
## Урок 12: Вложенные группы
Когда вы работаете со сложными данными, вам может легко понадобиться извлекать
несколько слоев информации, что может привести к вложенным группам. Как правило,
результаты захваченных групп находятся в том порядке, в котором они определены
(в порядке открытия скобок).
Возьмем пример из предыдущего урока о захвате имен файлов всех
изображений.файлы, которые у вас есть в списке. Если бы каждый из этих файлов
изображений имел последовательный номер изображения в имени файла, вы могли бы
извлечь и имя файла, и номер изображения, используя один и тот же шаблон,
написав выражение наподобие ^(IMG(\d+)).png$ (используя вложенный скобки для
записи цифр).
Вложенные группы читаются в шаблоне слева направо, при этом первая группа
захвата является содержимым первой группы скобок и т. д.
Для следующих строк напишите выражение, которое соответствует и фиксирует как
полную дату, так и год даты.
В Vim используйте команду ":%s/шаблон/замена/g" для выполнения упражнения.
Упражнение 12. Сопоставление вложенных групп
```
извлеките месяц и год из Jan 1987
извлеките месяц и год из May 1969
извлеките месяц и год из Aug 2011
```
используйте \1, \2 для подстановки группы
---
## Урок 13: Ещё больше разных групп
Как вы видели в предыдущих уроках, все квантификаторы, включая звездочку \*,
плюс +, повторение {m,n} и вопросительный знак ? все они могут использоваться в
шаблонах группы захвата. Это единственный способ применить квантификаторы к
последовательностям символов, а не к отдельным символам.
Например, если бы я знал, что номер телефона может содержать или не содержать
код города, правильный шаблон будет проверять наличие всей группы цифр (\d{3})?
а не сами отдельные персонажи (что было бы неправильно).
В зависимости от используемого механизма регулярных выражений вы также можете
использовать группы без захвата, которые позволят вам сопоставить группу, но не
отображать ее в результатах.
Ниже приведены несколько различных распространенных разрешений дисплея,
попробуйте зафиксировать ширину и высоту каждого дисплея.
В Vim используйте команду ":%s/шаблон/замена/g" для выполнения упражнения.
Упражнение 13. Сопоставление вложенных групп
```
извлеките ширину и высоту экрана из 1280x720
извлеките ширину и высоту экрана из 1920x1600
извлеките ширину и высоту экрана из 1024x768
```
---
## Урок 14: Все условно
Как мы упоминали ранее, всегда хорошо быть точным, и это относится к
кодированию, разговорам и даже регулярным выражениям. Например, вы не станете
составлять список покупок для кого-то, чтобы купить больше .*, потому что вы не
представляете, что вы можете получить взамен. Вместо этого вы могли бы написать
«Купи больше молока» или «Купи больше хлеба», и в регулярных выражениях мы можем
определить эти условия явно.
В частности, при использовании групп вы можете использовать | (логическое ИЛИ,
также известное как вертикальная черта) для обозначения различных возможных
наборов символов. В приведенном выше примере я могу написать шаблон «Купить еще
(молока|хлеба|сока)», чтобы он соответствовал только строкам «Купить еще
молока», «Купить еще хлеба» или «Купить еще сока».
Как и в обычных группах, вы можете использовать любую последовательность
символов или метасимволов в условии, например, ([cb]ats*|[dh]ogs?)
соответствует либо кошкам, либо летучим мышам, либо собакам, либо свиньям.
Написание шаблонов со многими условиями может быть трудным для чтения, поэтому
вам следует подумать о том, чтобы сделать их отдельными шаблонами, если они
станут слишком сложными.
Попробуйте написать условный шаблон, который соответствует только линиям с
маленькими нечеткими существами ниже.
Упражнение 14. Сопоставление условного текста
```
найдите I love cats
найдите I love dogs
пропустите I love logs
пропустите I love cogs
```
---
## Урок 15: Другие специальные символы
В этом уроке будут рассмотрены некоторые дополнительные метасимволы, а также
результаты захваченных групп.
Мы уже изучили наиболее распространенные метасимволы для записи цифр с помощью
\d, пробелов с помощью \s и буквенно-цифровых букв и цифр с помощью \w, но
регулярные выражения также предоставляют способ указания противоположных наборов
каждого из этих метасимволов с помощью их верхних значений. дела буквы.
Например, \D представляет собой любой нецифровой символ, \S — любой
непробельный символ, а \W — любой небуквенно-цифровой символ (например, знак
препинания). В зависимости от того, как вы составляете свое регулярное
выражение, может быть проще использовать одно или другое.
Кроме того, существует специальный метасимвол \b, который соответствует границе
между словом и символом, не являющимся словом. Это наиболее полезно при захвате
целых слов (например, с помощью шаблона \w+\b).
Одна концепция, которую мы не будем подробно рассматривать в этих уроках, — это
обратные ссылки, главным образом потому, что она зависит от реализации. Однако
многие системы позволяют ссылаться на захваченные группы, используя \0 (обычно
полный совпадающий текст), \1 (группа 1), \2 (группа 2) и т. д. Это полезно,
например, когда вы находитесь в текстовом редакторе и выполняя поиск и замену с
помощью регулярных выражений, чтобы поменять местами два числа, вы можете
выполнить поиск "(\d+)-(\d+)" и заменить его на "\2-\1", чтобы поставить
второе захваченное число первым, и первый захваченный номер второй например.
Ниже приведены несколько различных строк, попробуйте различные типы метасимволов
или что-нибудь, чему мы научились на предыдущих уроках, и продолжайте, когда
будете готовы.
Упражнение 15. Сопоставление других специальных символов
```
найдите The quick brown fox jumps over the lazy dog.
найдите There were 614 instances of students getting 90.0% or above.
найдите The FCC had to censor the network for saying &$#\*@!.
```
---
Поздравляем с окончанием уроков!

@ -0,0 +1,12 @@
# Задания на обработку данных в bash
## 1
Найдите на удалённом сервере в системном логе события "authentication failure" в /var/log/auth.log, уберите начало строки до "authentication failure" и сохраните их в файл.
## 2
Вызовите "for f in `seq 20`; do echo $RANDOM >> rnds; done" и отсортируйте данные rnds, в алфавитном порядке, по возрастанию чисел.
## 3
Конвейеры Unix позволяли организовывать сложные преобразования данных ещё до фреймворков обработки больших данных. Найдите гистограмму слов по методу mapreduce с помощью утилит и операторов конвейера. Гистограмма должна быть отсортирована по частоте встречи слова в тексте.
MapReduce выполняет следующие действия в первой фазе: разбивает содержимое файла на слова, сортирует их, каждому слову сопоставляет 1. Во второй фазе складывает единицы каждого слова, что даёт конечный результат. Используйте любой набор утилит и конструкций bash. Одно из решений задействует: uniq, sort, cat, sed.
Loading…
Cancel
Save