Skip to content

nsu-syspro/mpt-regex-basics-Nick-Dvesty

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Знакомство с регулярными выражениями

points bar

Очередная смешная картинка

Для решения каждого из заданий необходимо выписать последовательность команд, выполняющих то, что требуется в условии, в файл solution/taskX.sh, где X - номер соответствующего задания.

Отладка

Для локальной отладки можно запустить ваше решение с помощью следующей команды:

$ bash -xe solution/taskX.sh

Параметры -xe (-x и -e) включают логирование выполненных команд и завершение исполнения при первой ошибке, что бывает очень полезно при отладке скриптов. Более подробное описание этих и других опций утилиты bash можно получить с помощью

$ bash -c "help set"

Задание №1 (1 балл)

Файл data/pushkin.txt содержит произведение Александра Пушкина «Капитанская дочка».

Требуется посчитать, сколько раз в данном произведении встречается слово "дверь".

Вам понадобится grep и wc.

Задание №2 (2 балла)

Требуется посчитать, сколько раз в «Капитанской дочке» встречается слово "вина" (например, "... стакан вина и ..."). Причем различные частичные совпадения (например, "винам" или "половина") учитывать не нужно.

Задание №3 (2 балла)

Требуется посчитать, сколько раз в «Капитанской дочке» встречается слово "Пугачев" без учета частичных совпадений.

Задание №4 (2 балла)

Файл data/blok.txt содержит одно из самых известных стихотворений Александра Блока «Ночь, улица, фонарь, аптека...».

Требуется адаптировать это стихотворение для детей от 0 до 3 лет (утверждается, что до 5 лет дети не могут понять концепцию смерти): заменить все вхождения слова "Живи" на "Не спи" и "Умрёшь" на "Уснёшь". Результат вывести в файл data/blok_kids_edition.txt.

Вам понадобится sed, а конкретно формат команды для замены s/regexp/replacement/flags.

Задание №5 (3 балла)

Файл data/students.csv содержит список студентов и соответствующих номеров студенческих билетов в формате CSV:

<Фамилия> <Имя>[ <Отчество>],<Номер>

Note

Отчество заключено в квадратные скобки, потому что является опциональным элементом (например, у студентов из Казахстана нет отчества в паспорте).

Требуется переформатировать данный список в более человеко-читаемый вид (и сохранить результат в файл data/students.txt):

<Имя> <Фамилия> (<Номер>)

Например:

$ cat data/students.csv
Иванов Иван Иванович,000020
Назарбаева Хаят,120010
О Евгений Петрович,999999
...
$ bash solution/task2.sh && cat data/students.txt
Иван Иванов (000020)
Хаят Назарбаева (120010)
Евгений О (999999)
...

Вам понадобится sed.

В частности опция --regexp-extended (также -E или -r), активирующая режим расширенных регулярных выражений, поддерживающих группировку и обратные ссылки.

Рекомендация
Настоятельно рекомендуется ознакомиться с разделом 5.7 Back-references and Subexpressions из документации, особенно с последним примером:

$ echo "James Bond" | sed -E 's/(.*) (.*)/The name is \2, \1 \2./'
The name is Bond, James Bond.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 100.0%