Linux Professional Institute Learning Logo.
Перехід до основного вмісту
  • Головна
    • Усі ресурси
    • LPI Навчальні матеріали
    • Стати дописувачем
    • Видавничі партнери
    • Cтати видавничим партнером
    • Про нас
    • FAQ
    • Дописувачі
    • Дорожня карта
    • Контакти
  • LPI.org
3.2 Урок 2
Тема 1: Спільнота Linux та кар'єра у світі вільного програмного забезпечення
1.1 Розвиток Linux і популярні операційні системи
  • 1.1 Урок 1
1.2 Основні застосунки з відкритим кодом
  • 1.2 Урок 1
1.3 Відкрите програмне забезпечення та ліцензування
  • 1.3 Урок 1
1.4 ІКТ навички та робота в Linux
  • 1.4 Урок 1
Тема 2: Як знайти свій шлях у системі Linux
2.1 Основи командного рядку
  • 2.1 Урок 1
  • 2.1 Урок 2
2.2 Використання командного рядку для отримання допомоги
  • 2.2 Урок 1
2.3 Використання папок та перегляд списку файлів
  • 2.3 Урок 1
  • 2.3 Урок 2
2.4 Створення, переміщення та видалення файлів
  • 2.4 Урок 1
Тема 3: Потужність командного рядка
3.1 Архівація файлів через командний рядок
  • 3.1 Урок 1
3.2 Пошук та отримання даних з файлів
  • 3.2 Урок 1
  • 3.2 Урок 2
3.3 Перетворення команд у скрипт
  • 3.3 Урок 1
  • 3.3 Урок 2
Тема 4: Операційна система Linux
4.1 Вибір операційної системи
  • 4.1 Урок 1
4.2 Розуміння апаратного забезпечення комп'ютера
  • 4.2 Урок 1
4.3 Де зберігаються дані
  • 4.3 Урок 1
  • 4.3 Урок 2
4.4 Ваш комп'ютер у мережі
  • 4.4 Урок 1
Тема 5: Безпека та права доступу до файлів
5.1 Основи безпеки та визначення типів користувачів
  • 5.1 Урок 1
5.2 Створення користувачів та груп
  • 5.2 Урок 1
5.3 Керування дозволами та правами власності на файл
  • 5.3 Урок 1
5.4 Спеціальні папки та файли
  • 5.4 Урок 1
How to get certified
  1. Тема 3: Потужність командного рядка
  2. 3.2 Пошук та отримання даних з файлів
  3. 3.2 Урок 2

3.2 Урок 2

Сертифікат:

Linux Essentials

Версія:

1.6

Розділ:

3 Потужність командного рядку

Тема:

3.2 Пошук та отримання даних з файлів

Урок:

2 з 2

Вступ

У цьому уроці ми розглянемо інструменти, які використовуються для обробки тексту. Ці інструменти часто використовуються системними адміністраторами або програмами для автоматичного моніторингу або визначення певної повторюваної інформації.

Пошук у файлах за допомогою grep

Першим інструментом, який ми обговоримо на цьому уроці, є команда grep. grep є абревіатурою фрази “global regular expression print” (шукати скрізь рядки, які відповідають регулярному виразу, і виводити їх), і його основна функціональність полягає в пошуку в файлах за зазначеним шаблоном. Команда виводить рядок, що містить вказаний шаблон, який виділений червоним кольором.

$ grep bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
user:x:1001:1001:User,,,,:/home/user:/bin/bash

grep, як і більшість команд, також можна налаштувати за допомогою параметрів. Ось найпоширеніші з них:

-i

пошук не чутливий до регістру

-r

рекурсивний пошук (здійснюється пошук всіх файлів в даному каталозі та його підкаталогах)

-c

пошук підраховує кількість збігів

-v

інвертування збігу, щоб надрукувати рядки, які не відповідають пошуковому шаблону

-E

вмикає розширені регулярні вирази (потрібні деяким більш просунутим метасимволам, таким як | , + і ?)

grep має багато інших корисних опцій. Зверніться до man-сторінки, щоб дізнатися більше про це.

Регулярні вирази

Другий інструмент дуже потужний. Він використовується для опису фрагментів тексту у файлах, які також називають регулярними виразами. Регулярні вирази надзвичайно корисні для отримання даних із текстових файлів шляхом побудови шаблонів. Вони зазвичай використовуються в сценаріях або під час програмування мовами високого рівня, такими як Perl або Python.

Працюючи з регулярними виразами, дуже важливо мати на увазі, що кожен символ має значення і шаблон записується з метою відповідності певній послідовності символів, відомій як рядок. Більшість шаблонів використовує звичайні символи ASCII, такі як літери, цифри, розділові знаки або інші символи, але також можуть використовувати симовли Unicode, щоб відповідати будь-якому іншому типу тексту.

Наступний перелік пояснює метасимволи регулярних виразів, які використовуються для формування шаблонів.

.

Відповідність будь-якому окремому символу (крім нового рядка)

[abcABC]

Відповідність будь-якому символу в дужках

[^abcABC]

Відповідність будь-якому символу, крім символів у дужках

[a-z]

Відповідність будь-якому символу в діапазоні

[^a-z]

Відповідність будь-якому символу, крім символів у діапазоні

sun|moon

Пошук будь-якого із перерахованих рядків

^

Початок рядка

$

Кінець рядка

Всі функції регулярних виразів також можуть бути реалізовані за допомогою grep. Ви можете побачити, що у наведеному вище прикладі слово не береться в лапки. Щоб оболонка не інтерпретувала сам метасимвол, рекомендується, більш складні шаблони записувати у подвійних лапках (" "). З метою практики ми будемо використовувати подвійні лапки під час реалізації регулярних виразів. Інші лапки зберігають свою звичайну функціональність, як обговорювалося в попередніх уроках.

Наступні приклади підкреслюють функціональність регулярних виразів. Нам знадобляться дані у файлі, тому наступний набір команд просто додає різні рядки до файлу text.txt.

$ echo "aaabbb1" > text.txt
$ echo "abab2" >> text.txt
$ echo "noone2" >> text.txt
$ echo "class1" >> text.txt
$ echo "alien2" >> text.txt
$ cat text.txt
aaabbb1
abab2
noone2
class1
alien2

Перший приклад — це комбінація пошуку у файлі без регулярних виразів і з ними. Щоб повністю зрозуміти регулярні вирази, дуже важливо показати різницю. Перша команда шукає точний набір символів у будь-якому місці рядка, тоді як друга команда шукає набори символів, які містять будь-який із символів між дужками. Тому результати команд відрізняються.

$ grep "ab" text.txt
aaabbb1
abab2
$ grep "[ab]" text.txt
aaabbb1
abab2
class1
alien2

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

$ grep "^a" text.txt
aaabbb1
abab2
alien2
$ grep "2$" text.txt
abab2
noone2
alien2

На додаток до розглянутих раніше мета-символів, регулярні вирази також мають мета-символи, які дозволяють множити попередньо вказаний шаблон:

*

Нуль або більше входжень попереднього шаблону

+

Одне або кілька входжень попереднього шаблону

?

Нуль або одне входження попереднього шаблону

Для метасимволів множника наведена нижче команда шукає рядок, який містить ab, один символ і один або більше символів, знайдених раніше. Результат показує, що grep знайшов рядок aaabbb1, що відповідає частині abbb, а також abab2. Оскільки символ + є символом розширеного регулярного виразу, нам потрібно передати параметр -E команді grep.

$ grep -E "ab.+" text.txt
aaabbb1
abab2

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

Вправи до посібника

Використовуючи grep і файл /usr/share/hunspell/en_US.dic, знайдіть рядки, які відповідають наступним критеріям:

  1. Усі рядки, що містять слово cat у будь-якому місці рядка.

  2. Усі рядки, які не містять жодного з наступних символів: sawgtfixk.

  3. Усі рядки, які починаються з будь-яких 3 літер і слова dig.

  4. Усі рядки, які закінчуються принаймні на одну літеру e.

  5. Усі рядки, які містять одне з таких слів: org, kay або tuna.

  6. Кількість рядків, які починаються з однієї c або без неї, за якою слідує рядок ati.

Дослідницькі вправи

  1. Знайдіть регулярний вираз, який відповідає словам у рядку “Include” і не відповідає словам у рядку “Exclude”:

    • Include: pot, spot, apot

      Exclude: potic, spots, potatoe

    • Include: arp99, apple, zipper

      Exclude: zoo, arive, attack

    • Include: arcane, capper, zoology

      Exclude: air, coper, zoloc

    • Include: 0th/pt, 3th/tc, 9th/pt

      Exclude: 0/nm, 3/nm, 9/nm

    • Include: Hawaii, Dario, Ramiro

      Exclude: hawaii, Ian, Alice

  2. Яка ще корисна команда зазвичай використовується для пошуку у файлах? Які додаткові функції вона має?

  3. Згадуючи попередній урок, скористайтеся одним із прикладів і спробуйте знайти певний шаблон у виведенні команди за допомогою grep.

Підсумки

У цій лабораторній роботі ви дізналися про:

  • Метасимволи регулярних виразів.

  • Як створити шаблони за допомогою регулярних виразів.

  • Як виконувати пошук у файлах.

Команди, які використовуються у вправах:

grep

Пошук символів або рядків у файлі.

Відповіді до вправ посібника

Використовуючи grep і файл /usr/share/hunspell/en_US.dic, знайдіть рядки, які відповідають наступним критеріям:

  1. Усі рядки, що містять слово cat у будь-якому місці рядка.

    $ grep "cat" /usr/share/hunspell/en_US.dic
    Alcatraz/M
    Decatur/M
    Hecate/M
    ...
  2. Усі рядки, які не містять жодного з наступних символів: sawgtfixk.

    $ grep -v "[sawgtfixk]" /usr/share/hunspell/en_US.dic
    49269
    0/nm
    1/n1
    2/nm
    2nd/p
    3/nm
    3rd/p
    4/nm
    5/nm
    6/nm
    7/nm
    8/nm
    ...
  3. Усі рядки, які починаються з будь-яких 3 літер і слова dig.

    $ grep "^...dig" /usr/share/hunspell/en_US.dic
    cardigan/SM
    condign
    predigest/GDS
    ...
  4. Усі рядки, які закінчуються принаймні на одну літеру e.

    $ grep -E "e+$" /usr/share/hunspell/en_US.dic
    Anglicize
    Anglophobe
    Anthropocene
    ...
  5. Усі рядки, які містять одне з таких слів: org, kay або tuna.

    $ grep -E "org|kay|tuna" /usr/share/hunspell/en_US.dic
    Borg/SM
    George/MS
    Tokay/M
    fortunate/UY
    ...
  6. Кількість рядків, які починаються з однієї c або без неї, за якою слідує рядок ati.

    $ grep -cE "^c?ati" /usr/share/hunspell/en_US.dic
    3

Відповіді до дослідницьких вправ

  1. Знайдіть регулярний вираз, який відповідає словам у рядку “Include” і не відповідає словам у рядку “Exclude”:

    • Include: pot, spot, apot

      Exclude: potic, spots, potatoe

      Answer: pot$

    • Include: arp99, apple, zipper

      Exclude: zoo, arive, attack

      Answer: p+

    • Include: arcane, capper, zoology

      Exclude: air, coper, zoloc

      Answer: arc|cap|zoo

    • Include: 0th/pt, 3th/tc, 9th/pt

      Exclude: 0/nm, 3/nm, 9/nm

      Answer: [0-9]th.+

    • Include: Hawaii, Dario, Ramiro

      Exclude: hawaii, Ian, Alice

      Answer: ^[A-Z]a.*i+

  2. Яка ще корисна команда зазвичай використовується для пошуку у файлах? Які додаткові функції вона має?

    Команда sed. Ця команда може знаходити та замінювати символи або набори символів у файлі.

  3. Згадуючи попередній урок, скористайтеся одним із прикладів і спробуйте знайти певний шаблон у виведенні команди за допомогою grep.

    Я взяв одну з відповідей із дослідницьких вправ і шукав рядок, який має такі дозволи групи як читання, запис і виконання. Ваша відповідь може відрізнятися, залежно від вибраної команди та створеного шаблону.

    $ cat contents.txt | tr -s " " | grep "^....rwx"

    Ця вправа покаже вам, що grep також може отримувати вхідні дані від різних команд і може допомогти у фільтрації згенерованої інформації.

Linux Professional Institute Inc. Всі права захищені. Відвідайте веб-сайт навчальних матеріалів: https://learning.lpi.org
Ця робота ліцензована відповідно до міжнародної ліцензії Creative Commons Attribution-некомерційна-NoDerivatives 4.0.

Наступний Урок

3.3 Перетворення команд у скрипт (3.3 Урок 1)

Прочитайте наступний урок

Linux Professional Institute Inc. Всі права захищені. Відвідайте веб-сайт навчальних матеріалів: https://learning.lpi.org
Ця робота ліцензована відповідно до міжнародної ліцензії Creative Commons Attribution-некомерційна-NoDerivatives 4.0.

LPI є некомерційною організацією.

© 2023 Linux Professional Institute (LPI) - це глобальний стандарт сертифікації та організація підтримки кар'єри для професіоналів з відкритим вихідним кодом. Маючи понад 200 000 власників сертифікатів, це перший і найбільший в світі незалежний від постачальників орган з сертифікації Linux і з відкритим вихідним кодом. LPI має сертифікованих фахівців в більш ніж 180 країнах, здає іспити на декількох мовах і має сотні партнерів по навчанню.

Наша мета-надати економічні та творчі можливості для всіх, зробивши сертифікацію знань і навичок з відкритим вихідним кодом загальнодоступною.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Зв'яжіться з нами
  • Політика конфіденційності та Cookie-файлів

Помітили помилку або хочете допомогти поліпшити цю сторінку? Просимо дайте нам знати.

© 1999–2023 Linux Professional Institute Inc. Всі права захищені.