From ccf8d6add7b033527bd735d52c99e47a790b99d8 Mon Sep 17 00:00:00 2001 From: Vladimir Protsenko Date: Thu, 1 Sep 2022 17:14:14 +0400 Subject: [PATCH] Added tasks for lesson 2. --- 02_vim_regexp_dataprocessing/1_vimtutor_ru.md | 756 ++++++++++++++++++ .../2_regexptutor_ru.md | 511 ++++++++++++ .../3_bash_data_processing.md | 12 + 3 files changed, 1279 insertions(+) create mode 100644 02_vim_regexp_dataprocessing/1_vimtutor_ru.md create mode 100644 02_vim_regexp_dataprocessing/2_regexptutor_ru.md create mode 100644 02_vim_regexp_dataprocessing/3_bash_data_processing.md diff --git a/02_vim_regexp_dataprocessing/1_vimtutor_ru.md b/02_vim_regexp_dataprocessing/1_vimtutor_ru.md new file mode 100644 index 0000000..a317e2a --- /dev/null +++ b/02_vim_regexp_dataprocessing/1_vimtutor_ru.md @@ -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. + +Замечание! Если вы пока не уверены в том, что набираете, нажмите для + перехода в обычный режим (Normal mode). После этого перенаберите + требуемую команду. + +Замечание! Обычные клавиши управления курсором (стрелки) также должны + работать. Однако, клавиши hjkl позволят вам перемещаться + значительно быстрее, как только вы научитесь ими пользоваться. + +``` + +``` + Урок 1.2: ЗАВЕРШЕНИЕ РАБОТЫ С VIM +``` + +!! ВНИМАНИЕ! Прежде, чем выполнять любой из описанных ниже шагов, прочтите урок целиком !! + +1. Нажмите клавишу (для того, чтобы удостовериться, что вы в обычном режиме (Normal mode)). +2. Наберите: :q! . (Это означает, что вы должны набрать три символа :q! и нажать клавишу ввод.) Это позволит вам выйти из редактора БЕЗ СОХРАНЕНИЯ любых сделанных изменений. +3. Когда вы увидите приглашение командной оболочки, наберите команду, которая привела вас в этот учебник. Это может быть: vimtutor +4. Если вы уверены в том, что запомнили эти шаги, выполните шаги от 1 до 3 чтобы выйти и снова запустить редактор. + +Замечание! :q! отбрасывает любые сделанные вами изменения. Через несколько уроков вы узнаете как сохранять изменения в файл. + +1. Переместите курсор вниз к Уроку 1.3. + +``` + Урок 1.3: РЕДАКТИРОВАНИЕ ТЕКСТА -- УДАЛЕНИЕ + + +** Находясь в обычном режиме нажмите x для удаления символа под курсором. ** + + 1. Переместите курсор к строке ниже, помеченной --->. + + 2. Для исправления ошибок, переместите курсор, пока он не окажется над + удаляемым символом. + + 3. Нажмите клавишу x для удаления требуемого символа. + + 4. Повторите шаги со 2 по 4 пока строка не будет исправлена. + +---> От тттопота копытт пппыль ппо ппполю леттитт. + + 5. Теперь, когда строка откорректирована, переходите к Уроку 1.4. + +Замечание! В ходе освоения этого учебника не пытайтесь запоминать, учите + в процессе использования. + +``` + +``` + Урок 1.4: РЕДАКТИРОВАНИЕ ТЕКСТА -- ВСТАВКА + + + ** Находясь в обычном режиме, нажмите i для вставки текста. ** +``` + +1. Переместите курсор к первой строке ниже, помеченной --->. +2. Для того, чтобы сделать первую строку идентичной второй, поместите курсор на символ ПЕРЕД которым следует вставить текст. +3. Нажмите i и наберите требуемые добавления. +4. После исправления всех ошибок нажмите для возврата в обычный режим. Повторите шаги со 2 по 4, пока фраза не будет исправлена полностью. + +\---> Часть текста в строке бесследно . ---> Часть текста в этой строке бесследно пропала. + +1. Когда освоите вставку текста, переходите к Уроку 1.5. + +``` + Урок 1.5: РЕДАКТИРОВАНИЕ ТЕКСТА -- ДОБАВЛЕНИЕ + + + ** Находясь в обычном режиме, нажмите A для добавления текста. ** + + 1. Переместите курсор к первой строке ниже, помеченной --->. + Не имеет значения на каком символе расположен курсор на этой строке. + + 2. Нажмите A и наберите требуемые добавления. + + 3. После добавления требуемого текста нажмите для возврата в обычный + режим. + + 4. Переместите курсор на следующую строку, помеченную ---> и повторите шаги + со 2 по 4 для исправления этой строки. + +---> Часть текста в этой строке бессле + Часть текста в этой строке бесследно пропала. +---> Здесь также не достаёт час + Здесь также не достаёт части текста. + + 5. Когда освоите добавление текста, переходите к Уроку 1.6. + +``` + +``` + Урок 1.6: РЕДАКТИРОВАНИЕ ФАЙЛА + + +** Используйте :wq для сохранения файла и выхода из Vim. ** +``` + +!! ВНИМАНИЕ! Прежде, чем выполнять любой из описанных ниже шагов, прочтите урок целиком !! + +1. Выйдите из Vim, как вы это узнали в Уроке 1.2: :q! Или, если у вас есть доступ к другому терминалу, можете сделать следующее в нём. +2. По приглашению командной оболочки введите следующую команду: vim tutor `vim' -- команда для запуска редактора Vim, а `tutor' -- имя файла для редактирования. Используете имя файла, который можно изменять. +3. Вставляйте и удаляйте текст, как вы научились в предыдущих уроках. +4. Сохраните файл с изменениями и выйдите из Vim выполнив: :wq +5. Если вы вышли из vimtutor на шаге 1, перезапустите vimtutor и переходите к следующему Резюме. + +``` + РЕЗЮМЕ УРОКА 1 + + + 1. Курсор перемещается либо клавишами со стрелками, либо клавишами hjkl. + h (влево) j (вниз) k (вверх) l (вправо) + + 2. Для запуска Vim (из приглашения командной оболочки) наберите: + vim ИМЯ_ФАЙЛА + + 3. Для завершения работы с Vim наберите: + :q! чтобы отказаться от сохранения изменений. + Или наберите: + :wq чтобы сохранить изменения. + + 4. Для удаления символа под курсором в обычном режиме, нажмите: x + + 5. Чтобы вставить текст перед курсором в обычном режиме, наберите: + i вводите вставляемый текст + Чтобы добавить текст после курсора: + a вводите добавляемый текст + +Замечание! Нажатие переместит вас в обычный режим (Normal mode) либо + прервёт нежелательную и частично завершённую команду. + +Теперь переходите к Уроку 2. + +``` + +``` + Урок 2.1: КОМАНДЫ УДАЛЕНИЯ + + + ** Наберите dw для удаления участка текста до конца слова. ** +``` + +1. Нажмите , чтобы перейти в обычный режим. +2. Переместите курсор вниз, к строке помеченной --->. +3. Переместите курсор в начало слова, которое следует удалить. +4. Наберите dw для удаления этого слова. + +Замечание! Во время набора буквы dw появятся справа в самой нижней строке экрана. Если вы что-то наберёте неправильно, нажмите и начните сначала. + +\---> Несколько слов рафинад в этом предложении автокран излишни. + +1. Повторите шаги 3 и 4, пока не исправите все ошибки и переходите к Уроку 2.2. + +``` + Урок 2.2: ДОПОЛНИТЕЛЬНЫЕ КОМАНДЫ УДАЛЕНИЯ + + + ** Наберите d$ для удаления текста до конца строки. ** + + 1. Нажмите , чтобы перейти в обычный режим. + + 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. Нажмите и переходите к следующей ошибке (к первому символу, который надо изменить). +5. Повторите шаги 3 и 4 пока первое предложение не станет идентичным второму. + +\---> Несколько сола в эьгц строке тпгшцбь редалзкуюиесвх. ---> Несколько слов в этой строке требуют редактирования. + +Обратите внимание, что ce не только удаляет слово, но и переводит вас в режим вставки. + +``` + Урок 3.4: ПРОДОЛЖАЕМ ИЗМЕНЯТЬ С КОМАНДОЙ c + + + ** Команда замены используется с теми же объектами, что и команда удаления. ** + + 1. Команда изменения применяется таким же образом, как и команда удаления. + Её формат таков: + + [число] c объект ИЛИ c [число] объект + + 2. Объекты также совпадают: w (слово), $ (конец строки) и т.п. + + 3. Переместите курсор вниз, к строке помеченной --->. + + 4. Перейдите к первой ошибке. + + 5. Наберите c$ и отредактируйте первую строку так, чтобы она совпадала со + второй, после чего нажмите . + +---> Конец этой строки нуждается в помощи, чтобы стать похожим на второй. +---> Конец этой строки нуждается в помощи команды 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. Теперь наберите 'ошшшибка' . Это то слово, которое вы будете искать. +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/уводю/увожу . Обратите внимание на то, что эта команда заменит только первое найденное вхождение в строке. +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 после ! и нажмите . Команда выведет список файлов в текущем каталоге, точно также, как если бы вы ввели эту команду в приглашении оболочки. Или попробуйте :!dir , если команда ls не сработала. Замечание! Таким способом можно выполнить любую внешнюю команду с указанием аргументов. Замечание! Все команды, начинающиеся с : , должны завершаться нажатием . Далее на это не всегда будет обращаться особое внимание. + +``` + Урок 5.2: КАК ЗАПИСАТЬ ФАЙЛ + ** Для сохранения изменений, произведённых в файле, + наберите :w ИМЯ_ФАЙЛА. ** + 1. Наберите :!dir или :!ls для получения списка файлов в текущем + каталоге. Как вам уже известно, после ввода команды надо нажать . + 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 -- имя файла, который ещё не существует). До нажатия , проверьте что внизу экрана написано :'<,'>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. Теперь наберите какой-нибудь текст и нажмите для выхода из режима + вставки. +---> После нажатия o курсор перейдёт на новую пустую строку в режиме вставки. + 4. Для создания строки ВЫШЕ курсора, просто наберите заглавную O , вместо + строчной o . Попробуйте проделать это с нижеследующей строкой. +---> Создайте новую строку над этой, поместив на неё курсор и нажав Shift-O. +``` + +``` + Урок 6.2: КОМАНДА ДОБАВЛЕНИЯ + ** Наберите a , чтобы вставить текст ПОСЛЕ курсора. ** +``` + +1. Переместите курсор вниз, в начало первой строки помеченной --->. +2. Набирайте e пока курсор не переместиться на конец cтро . +3. Наберите a (в нижнем регистре) для добавления текста ПОСЛЕ символа, находящегося под курсором. (Заглавная A позволяет добавить в конец строки.) +4. Допишите слово так, как показано в строке ниже. Нажмите для выхода из режима вставки (Insert mode). +5. Используйте e для перехода к концу следующего незавершённого слова и повторите шаги 3 и 4. ---> Эта стро позволит вам попрактиков в добавле текста. ---> Эта строчка позволит вам попрактиковаться в добавлении текста. Замечание! a , i и A переводят в один и тот же режим вставки, различие только в том, где вставляются символы. + +``` + Урок 6.3: ЕЩЁ ОДИН СПОСОБ ЗАМЕНЫ + ** Наберите заглавную R для замены более чем одного символа. ** + 1. Переместите курсор вниз, к первой строке помеченной --->, и в начало + первого слова xxx. + 2. Теперь нажмите R и введите число, указанное ниже во второй строке, чтобы + заменить xxx. + 3. Нажмите для выхода из режима замены. Заметьте, что остаток строки + не был изменён. + 4. Повторите эти шаги для замены оставшихся xxx. +---> Добавление 123 к xxx даёт xxx. +---> Добавление 123 к 456 даёт 579. +Замечание! Режим замены похож на режим вставки, но каждый введённый символ + удаляет существующий. +``` + +``` + Урок 6.4: КОПИРОВАНИЕ И ВСТАВКА ТЕКСТА +** Используйте команду y для копирования и p для вставки ** +``` + +1. Переместите курсор вниз, к первой строке помеченной --->, и после \`а)'. +2. Переключитесь в режим визуального выбора нажав v и переместите курсор перед словом \`первый'. +3. Введите y для копирования подсвеченного текста. +4. Переместите курсор в конец следующей строки комбинацией j$ . +5. Нажмите p для вставки текста. Затем введите \`второй' и нажмите . ---> а) Этот элемент первый. б) Замечание! Также возможно использовать yw (команду y с оператором w ) для копирования одного слова. + +``` + Урок 6.5: УСТАНОВКА ПАРАМЕТРОВ + ** Установка параметра для игнорирования регистра при поиске или замене ** + 1. Найдите слово `игнорировать', набрав: /игнорировать . + Повторите поиск несколько раз, нажимая клавишу n . + 2. Установите параметр `ic' (игнорировать регистр), набрав: :set ic + + 3. Теперь снова несколько раз сделайте поиск слова `игнорировать', + нажимая: n + Заметьте, что теперь находятся `Игнорировать' и `ИГНОРИРОВАТЬ'. + + 4. Установите параметры `hlsearch' и `incsearch': :set hls is + 5. Теперь опять введите команду поиска и посмотрите, что получится: + /игнорировать + 6. Для возвращения учёта регистра при поиске наберите: :set noic +Замечание! Для отключения подсветки совпадений наберите: :nohlsearch +Замечание! Если вы хотите игнорировать регистр только для одного поиска, + используйте \с в команде поиска: /игнорировать\c +``` + +``` + РЕЗЮМЕ УРОКА 6 +``` + +1. Нажмите o для создания строки НИЖЕ курсора и перехода в режим вставки. Нажмите O для создания строки ВЫШЕ курсора. +2. Нажмите a для вставки текста ПОСЛЕ курсора. Нажмите A для вставки текста в конец строки. +3. Команда e подводит курсор к концу слова. +4. Команда y копирует текст, p -- вставляет скопированный текст. +5. Нажатие заглавной R переводит в режим замены до нажатия клавиши . +6. Наберите `:set xxx' для включения параметра `xxx', некоторые параметры: `ic' `ignorecase' игнорирование регистра при поиске `is' `incsearch' отображение частичных совпадений при поиске `hls' `hlsearch' подсветка всех совпадений при поиске +7. Добавьте \`no' перед параметром для его отключения: :set noic + +``` + Урок 7.1: ВСТРОЕННАЯ СПРАВКА + + + ** Используйте встроенную справочную систему ** + + Vim обладает мощной встроенной справочной системой. Для начала попробуйте + один из трёх вариантов: + - нажмите клавишу (если таковая имеется на клавиатуре) + - нажмите клавишу (если таковая имеется на клавиатуре) + - наберите :help + + Прочитайте текст в окне справки для получения представления о том как + работает справка. + Нажмите CTRL-W CTRL-W для перехода от окна к окну. + Наберите :q чтобы закрыть окно справки. + + Вы можете найти справку для любого понятия или команды, задав соответствующий + аргумент команде `:help'. Попробуйте следующее (не забудьте нажать ): + :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 и ** + 1. Удостоверьтесь, что Vim не в режиме совместимости: :set nocp + 2. Посмотрите какие файлы есть в каталоге: :!ls или :!dir + 3. Наберите начало команды: :e + 4. Нажмите CTRL-D и Vim отобразит список команд начинающихся на `e'. + 5. Нажмите и Vim дополнит название команды до `:edit'. + + 6. Теперь добавьте пробел и начало существующего имени файла: :edit ФАЙ + + 7. Нажмите и Vim дополнит имя файла, если оно уникальное. + +Замечание! Дополнение работает для многих команд. Попробуйте нажать CTRL-D и + . Это особенно полезно для команды :help . + +``` + +``` + РЕЗЮМЕ УРОКА 7 +``` + +1. Наберите :help или нажмите , или для открытия окна справки. +2. Наберите :help cmd для поиска справки по команде. +3. Нажмите CTRL-W CTRL-W для перехода к другому окну. +4. Наберите :q для закрытия окна справки (если оно активно). +5. Для хранения ваших настроек создайте стартовый сценарий \`vimrc'. +6. При наборе : команды, нажмите CTRL-D для отображения возможных дополнений. Нажмите для использования дополнения. + +``` + На этом завершается Учебник 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). + + Перевод: + Андрей Киселев , 2002. + Сергей Алёшин , 2014. + + Translators: + Andrey Kiselev , 2002. + Sergey Alyoshin , 2014. + +``` diff --git a/02_vim_regexp_dataprocessing/2_regexptutor_ru.md b/02_vim_regexp_dataprocessing/2_regexptutor_ru.md new file mode 100644 index 0000000..a9b7bc3 --- /dev/null +++ b/02_vim_regexp_dataprocessing/2_regexptutor_ru.md @@ -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 &$#\*@!. +``` +--- + +Поздравляем с окончанием уроков! diff --git a/02_vim_regexp_dataprocessing/3_bash_data_processing.md b/02_vim_regexp_dataprocessing/3_bash_data_processing.md new file mode 100644 index 0000000..6467691 --- /dev/null +++ b/02_vim_regexp_dataprocessing/3_bash_data_processing.md @@ -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. \ No newline at end of file