Grep

Grep

Середня

Вступ

Ми влаштувалися на роботу до місцевої бібліотеки, де допомагаємо впорядковувати колекцію старих книжок. Студенти, які приходять до бібліотеки, часто шукають цитати, які памʼятають лише наполовину, щоб процитувати їх у своїх курсових роботах. Замість того щоб вручну читати кожну книжку від першої до останньої сторінки, ми вирішуємо створити невеликий інструмент, який буде сканувати їх, шукаючи ці уривки цитат.

Вказівки

Знайти у файлах рядки, що містять рядок пошуку, і повернути всі знайдені рядки.

Команда Unix grep шукає у файлах рядки, що відповідають регулярному виразу. Наше завдання - реалізувати спрощену команду grep, яка підтримує пошук фіксованих рядків тексту (англ. string).

Команда grep приймає три аргументи:

  1. Рядок пошуку.
  2. Нуль або більше прапорців, які налаштовують поведінку команди.
  3. Один або більше файлів, у яких виконувати пошук.

Далі вона читає вміст указаних файлів (у вказаному порядку), знаходить рядки, що містять рядок пошуку, і нарешті повертає ці рядки в порядку, у якому їх було знайдено. Під час пошуку в кількох файлах перед кожним знайденим рядком додається імʼя файлу та двокрапка (':').

Прапорці

Команда grep підтримує такі прапорці:

  • -n Додає номер рядка та двокрапку (':') перед кожним рядком у вихідних даних, розміщуючи номер після імені файлу (якщо воно є).
  • -l Виводить лише імена файлів, які містять принаймні один знайдений рядок.
  • -i Шукає з порівнянням без урахування регістру.
  • -v Інвертує роботу програми: збирає всі рядки, що не відповідають умові пошуку.
  • -x Шукає лише ті рядки, які повністю збігаються з рядком пошуку.

Трек Powershell

Зміна прапорців

Powershell підтримує параметри-перемикачі для функцій, які поводяться подібно до прапорців у командному рядку.

Дотримуючись звичаю Powershell давати командлетам і їхнім властивостям докладні та багатослівні назви, прапорці, які використовуються в цій вправі, теж отримали змінені назви, щоб відповідати мові.

  • Line (-n): Додавати номер рядка та двокрапку (':') на початок кожного рядка у вихідних даних, розміщуючи номер після назви файлу (якщо вона є).
  • File (-l): Виводити лише назви файлів, які містять принаймні один рядок, що збігається.
  • Insensitive (-i): Порівнювати без урахування регістру.
  • Invert (-v): Інвертувати програму, тобто зібрати всі рядки, які не збігаються.
  • Whole (-x): Шукати лише ті рядки, у яких пошуковий рядок тексту (англ. string) збігається з цілим рядком.

Робота з файлами

Головне завдання - реалізувати функцію grep, а не перейматися тим, щоб правильно отримати шлях до файлів.

Ця вправа надає 3 обовʼязкові текстові файли: iliad.txt, midsummer-night.txt і paradise-lost.txt у тестовому наборі; достатньо отримати їхній вміст за допомогою Get-Content, використовуючи рядок тексту з назвою замість звичайного шляху до файлу.

Командлет

У Powershell справді є командлет, подібний до grep, який називається Select-String; якщо цікаво, більше про нього можна прочитати тут. У жодному разі не використовуйте Select-String у цій вправі.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
PowerShell Exercism

Час розпочати Grep?

Зареєструйтеся на Exercism, щоб вивчати й опановувати PowerShell, а також 136 вправ та справжнє наставництво від людей, і все це безкоштовно.