Linux

Как использовать базовые регулярные выражения для лучшего поиска и экономии времени

banner-01

Ищете ли вы с помощью Grep или ищете программы, которые могут переименовать файлы для вас, вы, вероятно, задаетесь вопросом, существует ли более простой способ выполнить свою работу. К счастью, есть, и это называется «регулярные выражения».

(Комикс от XKCD.com )

Что такое регулярные выражения?

Регулярные выражения — это операторы, отформатированные очень специфическим способом, которые могут означать много разных результатов. Также известные как «regex» или «regexp», они в основном используются в функциях поиска и именования файлов. Одно регулярное выражение может использоваться как формула для создания ряда различных возможных выходных данных, все из которых ищутся. Кроме того, вы можете указать, как следует называть группу файлов, указав регулярное выражение, и ваше программное обеспечение может постепенно переходить к следующему предполагаемому выводу. Таким образом, вы можете очень легко и эффективно переименовать несколько файлов в нескольких папках и выйти за пределы простой системы нумерации.

Поскольку использование регулярных выражений основывается на специальном синтаксисе, ваша программа должна быть способна их читать и анализировать. Многие программы пакетного переименования файлов для Windows и OS X имеют поддержку регулярных выражений, а также инструмент кроссплатформенного поиска GREP (о котором мы говорили в руководстве Bash Scripting для начинающих ) и инструмент командной строки Awk для * Nix. Кроме того, многие альтернативные файловые менеджеры, средства запуска и инструменты поиска используют их, и они занимают очень важное место в таких языках программирования, как Perl и Ruby. Другие среды разработки, такие как .NET, Java и Python, а также грядущий C ++ 11, предоставляют стандартные библиотеки для использования регулярных выражений. Как вы можете себе представить, они могут быть очень полезны при попытке минимизировать объем кода, который вы помещаете в программу.

Примечание о побеге персонажей

Прежде чем мы покажем вам примеры, мы бы хотели кое-что отметить. Мы собираемся использовать оболочку bash и команду grep, чтобы показать вам, как применять регулярные выражения. Проблема в том, что иногда мы хотим использовать специальные символы, которые необходимо передать в grep, и оболочка bash будет интерпретировать этот символ, потому что оболочка также использует его. В этих обстоятельствах нам нужно «сбежать» от этих персонажей. Это может сбить с толку, потому что это «экранирование» символов также происходит внутри регулярных выражений. Например, если мы хотим ввести это в grep:

\ <

мы должны заменить это на:

\\\ <

Каждый специальный символ здесь получает одну обратную косую черту. Кроме того, вы также можете использовать одинарные кавычки:

‘\ <‘

Одиночные кавычки говорят bash НЕ интерпретировать, что внутри них. Хотя мы требуем, чтобы эти шаги были предприняты, чтобы мы могли продемонстрировать для вас, ваши программы (особенно программы на основе графического интерфейса) часто не требуют этих дополнительных шагов. Для простоты и понятности фактическое регулярное выражение будет дано в виде текста в кавычках, и вы увидите экранированный синтаксис на снимках экрана командной строки.

Как они расширяются?

Регулярные выражения — это действительно лаконичный способ определения терминов, чтобы ваш компьютер мог расширить их на несколько вариантов. Давайте посмотрим на следующий пример:

Том [0123456789]

Квадратные скобки — [и] — сообщают механизму синтаксического анализа, что все, что находится внутри, может использоваться любой ОДИН символ. Все, что находится внутри этих скобок, называется набором символов.

Итак, если бы у нас был огромный список записей, и мы использовали это регулярное выражение для поиска, были бы найдены следующие термины:

  • Том
  • tom0
  • tom1
  • том2
  • том3

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

  • помидор ; регулярное выражение не учитывает никаких букв после «Том»
  • Том; регулярное выражение чувствительно к регистру!

Вы также можете выбрать поиск с точкой (.), Которая позволит любому присутствующему символу присутствовать, пока он присутствует.

reg vs period

Как вы можете видеть,

.Том

не приводил терминов, которые имели только «том» в начале. Вошли даже «зеленые помидоры», потому что пробел перед «том» считается символом, но такие термины, как «томФ», не имели символа в начале и поэтому игнорировались.

Примечание. По умолчанию Grep возвращает целую строку текста, когда какая-то часть соответствует вашему регулярному выражению. Другие программы могут этого не делать, и вы можете отключить это в grep с флагом ‘-o’.

Вы также можете указать чередование, используя трубу (|), как здесь:

Speciali (s | г) ^

Это найдет оба:

  • специализироваться
  • специализироваться

При использовании команды grep нам нужно экранировать специальные символы (, |, и) с обратной косой чертой, а также использовать флаг ‘-E’, чтобы заставить это работать и избежать уродливых ошибок.

escape paren pipe

Как мы упоминали выше, это связано с тем, что мы должны указать оболочке bash передать эти символы в grep и ничего не делать с ними. Флаг ‘-E’ указывает grep использовать круглые скобки и трубу как специальные символы.

Вы можете искать по исключению, используя каретку, которая находится как внутри ваших квадратных скобок, так и в начале набора:

Том [^ F | 0-9]

Опять же, если вы используете grep и bash, не забудьте выйти из этой трубы!

caret

Термины, которые были в списке, но не отображались:

  • tom0
  • tom5
  • tom9
  • tomF

Это не соответствует нашему регулярному выражению.

Как я могу использовать окружающую среду?

Часто мы ищем на основе границ. Иногда нам нужны только строки, которые появляются в начале слова, в конце слова или в конце строки кода. Это можно легко сделать, используя то, что мы называем якорями.

Использование каретки (вне скобок) позволяет обозначить «начало» строки.

^ том

beg of line

Для поиска конца строки используйте знак доллара.

том $

end of line

Вы можете видеть, что наша строка поиска приходит ДО привязки в этом случае.

Вы можете также для совпадений, которые появляются в начале или конце слов, а не целые строки.

\ <Том

Том \>

beg of word

end of word

Как мы упоминали в примечании в начале этой статьи, нам нужно экранировать эти специальные символы, потому что мы используем bash. Кроме того, вы также можете использовать одинарные кавычки:

beg of word q

end of word q

Результаты одинаковы. Убедитесь, что вы используете одинарные кавычки, а не двойные.

Другие ресурсы для продвинутых регулярных выражений

Мы только достигли вершины айсберга здесь. Вы также можете искать денежные термины, обозначенные маркером валюты, и искать любое из трех или более соответствующих терминов. Вещи могут стать действительно сложными. Если вы хотите узнать больше о регулярных выражениях, обратите внимание на следующие источники.

Вы также можете создавать и тестировать свои регулярные выражения с помощью бесплатного онлайн-инструмента на основе Flash, который называется RegExr . Он работает при вводе текста, является бесплатным и может использоваться в большинстве браузеров.


У вас есть любимое использование регулярных выражений? Знаешь отличный переименователь, который их использует? Может быть, вы просто хотите похвастаться своим грефу. Поделитесь своими мыслями, комментируя!

Похожие посты
Linux

8 лучших окружений рабочего стола Linux

AndroidIphone и ipadLinuxWindows

Окончательное руководство по включению темного режима везде

LinuxКак сделать

Что такое Swappiness в Linux? (и как это изменить)

LinuxКак сделать

Как использовать команду ls для вывода списка файлов и каталогов в Linux