З терміналом: Використання регулярних виразів

Одна з речей, яку я завжди любив у терміналі Linux - це те, чого можна досягти за допомогою регулярних виразів. Якщо нам потрібно знайти складний текст або замінити його чимось іншим, використання регулярних виразів може значно спростити роботу. Почнемо з початку:

ПОПЕРЕДЖЕННЯ: Цей пост - це біль у дупі. Постійне читання цього допису може спричинити втрату свідомості. Робіть перерви між ними або запитуйте свого лікаря або фармацевта, перш ніж прочитати всю публікацію.

Що таке регулярний вираз?

Регулярний вираз - це ряд спеціальних символів, які дозволяють нам описати текст, який ми хочемо знайти. Наприклад, якби ми хотіли шукати слово "linux", було б достатньо ввести це слово в програму, яку ми використовуємо. Саме слово є регулярним виразом. Поки це здається дуже простим, але що, якщо ми хочемо знайти всі числа в певному файлі? Або всі рядки, які починаються з великої літери? У цих випадках ти вже не можеш ввести простого слова. Рішення полягає у використанні регулярного виразу.

Регулярні вирази проти шаблонів файлів.

Перш ніж ми перейдемо до теми регулярних виразів, я хочу прояснити поширене непорозуміння щодо регулярних виразів. Регулярний вираз - це не те, що ми вводимо як параметр у таких командах, як rm, cp тощо для посилання на різні файли на жорсткому диску. Це був би шаблон файлу. Регулярні вирази, хоч і подібні тим, що використовують деякі загальні символи, різні. Шаблон файлу запускається проти файлів на жорсткому диску і повертає ті, які повністю відповідають шаблону, тоді як регулярний вираз спрацьовує проти тексту і повертає рядки, що містять шуканий текст. Наприклад, регулярний вираз, що відповідає шаблону *.* це було б щось на зразок ^.*\..*$

Типи регулярних виразів.

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

По-перше, існує два основних типи регулярних виразів, які містяться у стандарті POSIX, що і використовують інструменти Linux. Вони є основними та розширеними регулярними виразами. Багато команд, які працюють із регулярними виразами, такими як grep або sed, дозволяють використовувати ці два типи. Про них я розповім нижче. Є також регулярні вирази у стилі PERL, а потім є програми, такі як vim або emacs, які використовують їх варіанти. Залежно від того, що ми хочемо зробити, може бути доцільніше використовувати те чи інше.

Тестування регулярних виразів.

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

Перша - це команда grep. Цю команду ми будемо використовувати найчастіше для пошуку. Синтаксис такий:

grep [-E] 'REGEX' FICHERO
COMANDO | grep [-E] 'REGEX'

Я рекомендую завжди розміщувати регулярні вирази в одинарних лапках, щоб оболонка не підходила до цього. Перший спосіб - це знайти регулярний вираз у файлі. Другий дозволяє фільтрувати висновок команди через регулярний вираз. За замовчуванням grep використовує основні регулярні вирази. Параметр -E призначений для використання розширених регулярних виразів.

Фокус, який може допомогти нам побачити, як працюють регулярні вирази, дозволити використання кольору в команді grep. Таким чином буде виділено частину тексту, яка відповідає регулярному виразу, який ми використовуємо. Щоб активувати колір у команді grep, просто переконайтеся, що змінна середовища GREP_OPTIONS містять у вартості --color, що можна зробити за допомогою цієї команди:

GREP_OPTIONS=--color

Ми можемо помістити його в .bashrc, щоб завжди активувати його.

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

sed -n[r] '/REGEX/p' FICHERO
COMANDO | sed -n[r] '/REGEX/p'

Команда sed також використовує базові регулярні вирази за замовчуванням, ви можете використовувати розширені регулярні вирази з опцією -r.

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

awk '/REGEX/' FICHERO
COMANDO | awk '/REGEX/'

Ця команда завжди використовує розширені регулярні вирази.

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

- Lista de páginas wiki:

ArchLinux: https://wiki.archlinux.org/
Gentoo: https://wiki.gentoo.org/wiki/Main_Page
CentOS: http://wiki.centos.org/
Debian: https://wiki.debian.org/
Ubuntu: https://wiki.ubuntu.com/

- Fechas de lanzamiento:

Arch Linux: 11-03-2002
Gentoo: 31/03/2002
CentOs: 14-05-2004 03:32:38
Debian: 16/08/1993
Ubuntu: 20/10/2004

Desde Linux Rulez.

Це текст, який я буду використовувати для прикладів у решті допису, тому я рекомендую скопіювати його у файл, щоб він був у пригоді з терміналу. Ви можете поставити потрібне ім’я. Я назвав це регулярним виразом.

Початковий урок.

Тепер у нас є все необхідне для початку тестування регулярних виразів. Ходімо потроху. Я збираюся навести кілька прикладів пошуку з регулярними виразами, в яких я пояснити, для чого призначений кожен символ. Це не дуже хороші приклади, але оскільки у мене буде дуже довгий пост, я не хочу більше його ускладнювати. І я просто збираюся подряпати поверхню того, що можна зробити за допомогою регулярних виразів.

Найпростіший з усіх - це пошук конкретного слова, наприклад, припустимо, ми хочемо шукати всі рядки, що містять слово «Linux». Це найпростіше, оскільки нам потрібно лише написати:

grep 'Linux' regex

І ми можемо побачити результат:

аркаLinux: https://wiki.archlinux.org/ Арх Linux: 11-03-2002 Від Linux Рулес.

Це три рядки, які містять слово "Linux", яке, якщо ми скористались кольоровим трюком, буде виділено. Зверніть увагу, що воно розпізнає слово, яке ми шукаємо, навіть якщо воно є частиною більш довгого слова, як у "ArchLinux". Однак у ньому не виділено слово "linux", яке з'являється в URL-адресі "https://wiki.archlinux.org/". Це тому, що там воно відображається з малою літерою "l", і ми шукали його у верхньому регістрі. Команда grep має для цього варіанти, але я не буду говорити про них у статті про регулярні вирази.

За допомогою цього простого тесту ми можемо зробити перший висновок:

  • Звичайний символ, введений у регулярний вираз, відповідає самому собі.

Це означає, що якщо ви поставите букву "а", вона буде шукати букву "а". Це здається логічним, так? 🙂

Тепер припустимо, ми хочемо шукати слово "CentO", за яким слід будь-який символ, але лише один символ. Для цього ми можемо використовувати символ ".", Який є символом підстановки, який відповідає будь-якому символу, але лише одному:

grep 'CentO.' regex

І результат такий:

CentOS: http://wiki.centos.org/
центів: 14-05-2004 03:32:38

Що означає, що він включає "S" у "CentOS", хоча в одному випадку це велика літера, а в іншому мала. Якби в цьому місці з’явився будь-який інший персонаж, він також містив би його. У нас вже є друге правило:

  • Персонаж "." відповідає будь-якому персонажу.

Це вже не так тривіально, як здавалося, але з цим ми не можемо багато чого зробити. Підемо трохи далі. Припустимо, що ми хочемо знайти рядки, в яких з’являються 2002 та 2004 рр. Вони здаються двома пошуками, але їх можна зробити одразу так:

grep '200[24]' regex

Це означає, що ми хочемо знайти число 200, за яким слідують 2 або 4. І результат такий:

ArchLinux: 11-03-2002
Gentoo: 31. /2002
CentOS: 14-05-2004 03:32:38
Ubuntu: 20/10/2004

Що підводить нас до третього правила:

  • Кілька символів, укладених у дужки, відповідають будь-якому з символів у дужках.

Дужки дають більше гри. їх також можна використовувати для виключення символів. Наприклад, припустимо, ми хочемо шукати сайти, на яких з’являється символ ":", але за ним не йде "/". Команда буде такою:

grep ':[^/]' regex

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

ArchLinux: https://wiki.archlinux.org/
Gentoo: https://wiki.gentoo.org/wiki/Main_Page
CentOS: http://wiki.centos.org/
Debian: https://wiki.debian.org/
Ubuntu: https://wiki.ubuntu.com/
Arch Linux: 11-03-2002 Gentoo: 31 CentOs: 14-05-2004 03:32:38 Debian: 16 Ubuntu: 20/10/2004

Тепер за іменами дистрибутива виділено ":", але не в URL-адресах, оскільки після них URL-адреси мають "/".

  • Поміщення символу "^" на початку дужки відповідає будь-якому символу, крім інших символів у дужці.

Ще одне, що ми можемо зробити, це вказати діапазон символів. Наприклад, для пошуку будь-якого числа, за яким слідує "-", це буде виглядати так:

grep '[0-9]-' regex

Цим ми вказуємо символ від 0 до 9, а потім знак мінус. Подивимось результат:

ArchLinux: 11-03-2002 CentOs: 14-05-2004 03: 32: 38

Ви можете вказати кілька діапазонів у дужках, щоб навіть змішувати діапазони з окремими символами.

  • Розміщення двох символів, розділених символом "-", у дужках відповідає будь-якому символу в межах діапазону.

Подивимось зараз, чи зможемо ми виділити першу частину URL-адрес. Той, на якому написано "http" або "https". Вони відрізняються лише кінцевими "s", тому давайте зробимо це наступним чином:

grep -E 'https?' regex

Знак питання використовується, щоб зробити символ ліворуч необов’язковим. Але тепер ми додали опцію -E до команди. Це тому, що допит є особливістю розширених регулярних виразів. Поки що ми використовували основні регулярні вирази, тому нам не потрібно було нічого вкладати. Подивимось результат:

ArchLinux: протокол HTTPS: //wiki.archlinux.org/ Gentoo: протокол HTTPS: //wiki.gentoo.org/wiki/Main_Page CentOS: HTTP: //wiki.centos.org/ Debian: протокол HTTPS: //wiki.debian.org/ Ubuntu: протокол HTTPS: //wiki.ubuntu.com/

Отже, ми вже маємо нове правило:

  • Символ, за яким слідує "?" відповідає цьому персонажу або жодному. Це справедливо лише для розширених регулярних виразів.

Зараз ми знайдемо два абсолютно різних слова. Давайте подивимося, як знайти рядки, що містять як слово "Debian", так і "Ubuntu".

grep -E 'Debian|Ubuntu' regex

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

Debian: https://wiki.debian.org/
Ubuntu: https://wiki.ubuntu.com/
Debian: 16 / 08 / 1993
Ubuntu: 20 / 10 / 2004
  • Персонаж «|» служить для відокремлення декількох регулярних виразів та збігів з будь-яким із них. Це також характерно для розширених регулярних виразів.

Продовжимо. Зараз ми будемо шукати слово "Linux", але лише там, де воно не прилипне до іншого слова зліва. Ми можемо зробити це так:

grep '\

Тут важливим символом є "<", але його потрібно уникнути, поставивши перед ним "\", щоб grep інтерпретував його як спеціальний символ. Результат такий:

арка Linux: 11-03-2002 Від Linux Рулес.

Ви також можете використовувати "\>" для пошуку слів, які не знаходяться поруч. Давайте на прикладі. Спробуємо цю команду:

grep 'http\>' regex

Результат, який він дає:

CentOS: HTTP: //wiki.centos.org/

Вийшло "Http", але не "https", оскільки в "https" все ще є символ праворуч від "p", який може бути частиною слова.

  • Символи "<" та ">" відповідають початку та кінцю слова відповідно. Ці символи потрібно уникати, щоб вони не інтерпретувались як буквальні символи.

Ми йдемо з речами трохи складнішими. Символ "+" відповідає символу зліва, повтореному принаймні один раз. Цей символ доступний лише з розширеними регулярними виразами. За допомогою нього ми можемо шукати, наприклад, послідовності з декількох чисел поспіль, які починаються на ":".

grep -E ':[0-9]+' regex

Результат:

CentOs: 14 05: 32: 38

Число 38 також виділено, оскільки воно також починається з ":".

  • Символ "+" відповідає символу зліва, повтореному принаймні один раз.

Ви також можете контролювати кількість повторень за допомогою "{" та "}". Ідея полягає в тому, щоб вставити в дужки число, яке вказує точну кількість повторень, яку ми хочемо. Ви також можете поставити діапазон. Давайте подивимося приклади двох випадків.

Спочатку ми знайдемо всі чотиризначні послідовності, які є:

grep '[0-9]\{4\}' regex

Зверніть увагу, що вам доведеться уникати фігурних дужок, якщо ви використовуєте основні регулярні вирази, але ні, якщо ви використовуєте розширені. З розширеним це було б так:

grep -E '[0-9]{4}' regex

І результатом в обох випадках буде такий:

ArchLinux: 11-03-2002
Gentoo: 31. /2002
CentOS: 14-05-2004 03:32:38
Debian: 16/08/1993
Ubuntu: 20/10 /2004
  • Символи "{" та "}" із числом між ними збігаються з попереднім символом, повтореним зазначеною кількістю разів.

Тепер інший приклад з брекетами. Припустимо, ми хочемо знайти слова, які мають від 3 до 6 малих літер. Ми можемо зробити наступне:

grep '[a-z]\{3,6\}' regex

І результат буде такий:

- Л.ішта de сторінкаs вики: ДОrchLinux: протокол HTTPS:/ /вики.Арклінукс.org/ Gтоді: протокол HTTPS:/ /вики.gentoo.org/вики/Mайн_Pвік
CЛОРОС: HTTP:/ /вики.CentOS.org/ Debian: протокол HTTPS:/ /вики.Debian.org/ АБОмертвий кінець: протокол HTTPS:/ /вики.Ubuntu.кому/ - Фви пропустите de запуск: ДОrch Linux: 11-03-2002 Gтоді: 31 СЛОРOs: 14-05-2004 03:32:38
Debian: 16 Uмертвий кінець: 20 Dце є Linux Rулез.

Що, як бачите, мало схоже на те, що ми хотіли. Це тому, що регулярний вираз знаходить літери в інших словах, які довші. Давайте спробуємо таку іншу версію:

grep '\<[a-z]\{3,6\}\>' regex

Результат:

- Список сторінок вики: ArchLinux: протокол HTTPS:/ /вики.archlinux.org/ Gentoo: протокол HTTPS:/ /вики.gentoo.org/вики/ Main_Page CentOS: HTTP:/ /вики.CentOS.org/ Debian: протокол HTTPS:/ /вики.Debian.org/ Ubuntu: протокол HTTPS:/ /вики.Ubuntu.кому/

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

  • Символи "{" та "}" з двома цифрами, розділеними комами, збігаються з попереднім символом, що повторюється кількість разів, позначених двома цифрами.

Давайте зараз розглянемо символ, який є простим знаком "+". Це "*", і його робота дуже схожа лише на те, що вона відповідає будь-якій кількості символів, включаючи нуль. Тобто, він робить те саме, що і "+", але не вимагає, щоб символ зліва відображався в тексті. Наприклад, спробуємо знайти ті адреси, які починаються на wiki і закінчуються на org:

grep 'wiki.*org' regex

Подивимось результат:

ArchLinux: https: //wiki.archlinux.org/ Gentoo: https: //wiki.gentoo.org/ wiki / Main_Page CentOS: http: //wiki.centos.org/ Debian: https: //wiki.debian.org/

Perfecto.

Тепер останній персонаж, якого ми збираємось побачити. Символ "\" використовується, щоб уникнути символу праворуч, щоб він втратив своє особливе значення. Наприклад: Припустимо, ми хочемо знайти рядки, які закінчуються точкою. Перше, що може нам спасти на думку, може бути таке:

grep '.$' regex

Результат не той, який ми шукаємо:

- Список вікі-сторінок:
ArchLinux: https://wiki.archlinux.org/
Gentoo: https://wiki.gentoo.org/wiki/Main_Page
CentOS: http://wiki.centos.org/
Debian: https://wiki.debian.org/
Ubuntu: https://wiki.ubuntu.com/
- Дати випуску: Arch Linux: 11-03-2002
Gentoo: 312
CentOs: 14-05-2004 03:32:38
Debian: 163
Ubuntu: 204
Desde Linux Рулес.

Це тому, що "." він відповідає будь-чому, так що регулярний вираз відповідає останньому символу кожного рядка, яким би він не був. Рішення полягає в наступному:

grep '\.$' regex

Тепер результат - те, що ми хочемо:

Desde Linux Рулес.

Гра закінчена

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

Наразі це все. Якщо вам сподобалась ця стаття, можливо, ви можете написати іншу. Тим часом я рекомендую спробувати всі регулярні вирази в терміналі, щоб чітко побачити, як вони працюють. І пам’ятайте: лише Чак Норріс може аналізувати HTML за допомогою регулярних виразів.


28 коментарі, залиште свій

Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   Єзекіїль - сказав він

    Яким було б наше життя без регулярного виразу?
    Стаття дуже корисна, але я прочитаю її потроху. Дуже дякую.

    1.    гексборг - сказав він

      Дякую за коментар. Я досі не вірю, що моя стаття вийшла. 🙂 Вийшло з певною помилкою, але, сподіваюся, це корисно. 🙂

  2.   Скалібур - сказав він

    Дякую вамssssssss! ..

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

    Дуже добре! .. .. Я збираюся взяти той аспірин .. ей

    1.    гексборг - сказав він

      Ласкаво просимо. Сміливість і те, що регулярні вирази не можуть з тобою. 🙂

  3.   Танракс - сказав він

    Фантастичний пост! Чудова робота. Цікаво, скільки годин у вас пішло 😀

    1.    гексборг - сказав він

      ЛОЛ!! Питання: Скільки годин у мене зайняло б, якби я сказав усе, що мав намір сказати? Нескінченний !! 🙂

  4.   таммуз - сказав він

    одного я не знав, хороша стаття!

    1.    гексборг - сказав він

      Дякую. Приємно ділитися нею з вами.

  5.   helena_ryuu - сказав він

    чудове пояснення. вітаю! дійсно корисно!

    1.    гексборг - сказав він

      Я рада, що Ви знайшли це корисним. Тож із задоволенням писати.

  6.   анти - сказав він

    Це має піти кудись особливе. Як і Рекомендовані, але які мають цілком конкретну корисність. Цілком корисно, хоча я хотів би бачити, як це застосовується до Vim.

    1.    гексборг - сказав він

      Це питання задавати себе. Я маю на увазі ще кілька статей про регулярні вирази. І я міг би говорити про вим у них. Він має деякі відмінності від того, що я пояснив у цій статті. Це питання продовження. 🙂

  7.   Фернандо - сказав він

    Добре!

    Ваша стаття дуже хороша, вона цікава, нещодавно (прямо зараз) я опублікував на своєму веб-сайті запис, який я готував кілька днів, де я зібрав список метасимволів для регулярних виразів і деякі приклади. І входити було справедливо DesdeLinux і подивіться запис на ту ж тему!

    Якщо це якесь розраду, моє НАБАГАТО БІЛЬШЕ US

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

    Привіт і дуже дуже хороша робота.

    1.    гексборг - сказав він

      Велике спасибі.

      Мені також сподобалась ваша стаття. Це лаконічніше мого. Це може бути швидким довідником. Випадково, що ми писали їх одночасно. Ви бачите, що люди цікавляться цією темою. 🙂

  8.   Еллері - сказав він

    Регулярні вирази для манекенів =), тепер мені це зрозуміліше, до речі, один із способів отримати вихід з кольором для grep - це створення псевдоніма в .bashrc, псевдонім grep = 'grep –color = always', на випадок це комусь вдається.

    привіт

    1.    гексборг - сказав він

      Правда. Це ще один спосіб зробити це. Дякуємо за вступ. 🙂

  9.   KZKG ^ Гаара - сказав він

    O_O ... внесок !!! O_O ...
    Щиро дякую за пост, я деякий час чекав чогось такого, ха-ха, я залишаю його відкритим, щоб спокійно читати його вдома з нульовими клопотами, щоб зосередитись хаха.

    Дякую за статтю, я справді 😀

    1.    гексборг - сказав він

      Я знав, що тобі сподобається. ЛОЛ!! Правда в тому, що багато речей бракує, але я вже маю на увазі другу частину. 🙂

  10.   Елієцер Татес - сказав він

    Чудова стаття, якби я прочитав її вчора, клас, який я прочитав сьогодні, був би ще простішим для моїх учнів!

    1.    гексборг - сказав він

      ЛОЛ!! Шкода, що я запізнився, але радий, що це корисно. 🙂

  11.   ЛеоТоро - сказав він

    Нарешті !!!, супер хороший пост ..... Нарешті я знайшов щось, що чітко пояснює регулярні вирази ... ..

    1.    гексборг - сказав він

      Там багато інформації, але важче знайти щось, що легко зрозуміти. Я радий, що заповнив цю прогалину. 🙂

      Привіт.

  12.   Шекспір ​​Родос - сказав він

    Гей, мені потрібна допомога, мені потрібно зробити пошук у / var / logs у форматі: yymmdd, а журнали виглядають як 130901.log -130901.log, я повинен шукати всіх, хто знаходиться з 1 вересня по 11 жовтня , Єдине, що мені вдалося зробити, це видалити весь вересень, але я не знаю, як зробити повний ланцюжок:

    приклад: 1309 [0-3] повертає журнали між 1 і 30 вересня, але я не знаю, як отримати їх також в тому ж ланцюжку з 1 по 11 жовтня.

    1.    гексборг - сказав він

      Зробити це за допомогою регулярних виразів дещо складно. Мені здається, що щось подібне може спрацювати:

      13(09[0-3]|10(0|1[01]))

      Це розширений регулярний вираз. Ви не кажете, який інструмент ви використовуєте, тому я не можу надати вам більше деталей.

      У будь-якому випадку, я думаю, що це так, замість використання регулярних виразів краще робити це за допомогою find. Ви можете спробувати щось подібне:

      знайти. -newermt '01 вересня '-a! -newermt '11 жовтня '-друк

      Удача. Сподіваюся, це може вам допомогти.

  13.   чіпо - сказав він

    Привіт! Перш за все, я хотів би подякувати вам за вашу роботу, оскільки ця сторінка входить до моєї "топ-3" найкращих сайтів Linux.
    Я займався і не знав, чому RegExp на телефонний номер у мене не працював, і саме через те, що мені не вистачало «-E» (що я зрозумів завдяки цій публікації).
    Я хотів запитати вас, чи не знаєте ви жодного хорошого pdf-файлу чи сайту, де є вправи на RegExp, хоча, доклавши трохи фантазії, ви можете потренуватися вигадувати їх самостійно.

    Привіт, Пабло.

  14.   Клі - сказав він

    Дуже добре, я просто все це прочитав, і так, зараз мені потрібен аспірин 🙂

  15.   Оскар - сказав він

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

    Привітання.

  16.   Алексадер - сказав він

    Мені дуже сподобалось дуже вдале пояснення