Использование grep для файлов, соответствующих определенным критериям
Команда Grep (глобальная печать регулярных выражений) находит и ищет определенный шаблон в регулярных выражениях. Эта команда фильтрует и ищет определенный шаблон символов и отображает их в качестве вывода. Она считается одной из самых полезных команд в Unix/Linux-подобных системах для системных администраторов и разработчиков.
Linux содержит различные типы команд и утилит для упрощения каждой задачи. В отличие от других операционных систем, найти любой файл в Linux очень просто, поскольку для поиска любого файла можно использовать команду grep.
Вы можете использовать команду grep для отображения имени конкретного файла, содержащего определенный шаблон, который вы ищете. Однако есть несколько вещей, которым следует следовать при использовании команды grep в Linux:
По умолчанию Grep — это команда, чувствительная к регистру. ,Вот почему вы должны использовать опцию -i для соответствия шаблону без учета регистра.
Вы должны использовать кавычки в команде grep для поиска символа, имеющего особое значение для оболочки.
-
Команда Grep отображает всю строку, содержащую определенный символ. Поэтому вам нужно использовать опцию -o только для отображения имени файла и искомого символа.
В этом кратком руководстве мы будем использовать grep для файлов, соответствующих определенным критериям в Linux.
Использование Grep для файлов, соответствующих определенным критериям в Linux
Команда grep предустановлена в большинстве дистрибутивов Linux. Давайте создадим несколько примеров файлов в каталоге «Документы» и сопоставим строку или регулярное выражение в этих файлах.
~$: sudo tree Documents
Documents
|__ sample1
|__ sample2
|__ sample3
0 directories, 3 files
Теперь мы будем искать эти примеры файлов с помощью различных параметров команды grep в Linux.
Сопоставление поиска по файлам с учетом регистра
Он подпадает под поиск с учетом регистра, если вам нужно найти точные слова и шаблоны с помощью grep в файлах.
grep <pattern> <filename1> <filename2>.....
Здесь мы будем искать слово «unix» среди всех файлов в каталоге «Документы».
Для этого используйте команду ниже —
~$: grep unix sample1 sample2 sample3
sample1:unix
sample3:unix operating system
Приведенная выше команда соответствует указанному шаблону и отображает файлы, содержащие «unix».
Сопоставление результатов поиска по файлам без учета регистра
Вы можете бесчувственно искать любой шаблон, используя опцию -i с приведенной выше командой —
grep -i <pattern> <filename1> <filename2>.....
Давайте отобразим все результаты, относящиеся к «unix», но терминал покажет все файлы, содержащие «Unix» или «unix».
~$: grep -i "unix" sample1 sample2 sample3
sample1:unix
sample1:Unix
sample2:Unix
sample3:unix operating system
Поиск только совпадающего шаблона
Команда grep по умолчанию отображает весь абзац или строку. Вы можете показать только шаблон вместо всего отрывка или строки, используя опцию -o с командой grep.
grep -o "<pattern>" <filename>
Здесь мы будем искать «Linux» с помощью команды grep и ее опции -o –
~$: grep -o "Linux" sample1 sample3
sample1:Linux
Поиск имен файлов, соответствующих шаблону
Если вы хотите найти файлы, содержащие определенный шаблон или строку, используйте следующую команду —
grep -l "<pattern>" <filename1> <filename2>.....
Или,
grep -l "<pattern>" *
Например, команда ниже покажет имя файла в текущем каталоге, содержащее слово «linux» —
~$: grep -l "linux" *
sample1
sample3
Соответствие любому шаблону
Используйте следующую команду grep для отображения определенных символов, соответствующих любому слову, шаблону и т. д. в файлах.
grep "..<letter_pattern>" <filename>
Здесь команда ниже показывает шаблоны «Linux» и «Unix», которые заканчиваются на «x».
~$: grep "..x" sample1 sample3
sample2:Linux
sample2:Linux
sample2:Unix
sample3:linux
sample3:unix operating system.
Соответствие инвертирующему шаблону
Вы можете сопоставить только строки, не похожие на указанный шаблон. В этом случае вы можете использовать опцию -v с командой grep следующим образом:
grep -v "<pattern>" <filename>
Например, мы будем искать те файлы, которые не содержат слова «Linux».
~$: grep -v "Linux" sample1 sample2 sample3
sample1:GNU operating system
sample1:gnu
sample1:Gnu
sample:unix
sample1:linux
sample1:unix
sample2:GNU
sample2:unix
sample3:linux
sample3:unix operating system.
sample3:gnu operating system.
Соответствие шаблону, который начинается с определенного слова/строки
Шаблон регулярного выражения «^» определяет начало отрывка или строки. Используя следующую команду grep, вы можете отобразить строки, начинающиеся с определенного шаблона или строки.
grep "^<pattern>" <filename>
В следующей команде мы будем использовать команду grep для поиска «gnu» в файлах —
~$: grep "^gnu" sample2 sample3
sample3:gnu operating system.
Соответствие шаблону, который заканчивается определенным словом/строкой
Шаблон регулярного выражения «$» определяет конец отрывка/строки. Используя это выражение с командой grep, вы можете сопоставить строки или отрывки, которые заканчиваются указанным шаблоном/словом.
grep "<pattern>$" <filename>
Например, мы будем искать «систему» в нескольких файлах –
~$: grep "system$" sample1 sample2 sample3
sample3:unix operating system.
sample3:gnu operating system.
Рекурсивное сопоставление шаблона в каталоге
Если вы хотите сопоставить шаблон во всем каталоге, а не в конкретных файлах в каталоге, вы можете использовать опцию -R с командой grep следующим образом:
grep -R <pattern> <directory>
Теперь мы рекурсивно запустим команду grep, чтобы найти файлы, содержащие «GNU», в каталоге «Документы» —
~$: grep -R GNU Documents
Documents/sample2:GNU
Documents/sample1:GNU operating system
Бонусный совет. Если вы хотите сопоставить определенный шаблон среди всех файлов, присутствующих в текущем каталоге, вы можете сделать это, используя опцию -w с командой grep следующим образом:
grep -w <pattern> *
Сопоставление файлов с определенными расширениями
Используйте следующую команду для поиска шаблона в файлах с определенным расширением, включенных в каталог.
grep -R --include=*.<file_extention> '<pattern>' <directory>
В приведенном ниже примере команда grep проверяет указанный шаблон только в файлах с расширением «.txt».
~$: grep -R --include=*.txt 'Linux' Documents
Documents/sample1.txt:Linux is a kernel
Примечание. Вы также можете использовать приведенную выше команду для сопоставления шаблонов в файлах с несколькими расширениями одновременно.
Заключение
Команда grep — отличный способ фильтровать файлы с определенными шаблонами через терминал в Linux. В этом руководстве мы объяснили способы сопоставления определенных критериев в файлах на различных примерах. Использовать команду grep очень просто, и вы также можете убедиться в этом на некоторых из приведенных выше примеров. Таким образом, вы можете использовать команду grep для поиска любого шаблона, строки, слова и т. д. в Linux всего за несколько кликов.