Как выполняется поиск файлов с использованием шаблонов

Обновлено: 21.11.2024

Файлы в Linux можно искать с помощью одной строки команды. Когда дело доходит до использования Linux, одной из наиболее распространенных операций является поиск файлов и каталогов. В системах Linux есть несколько команд, которые позволяют вам искать файлы, наиболее часто используемыми из которых являются find и locate, в то время как команда grep — это утилита поиска, используемая в основном для возврата строк из файла или файлов, которые соответствуют определенному поисковому запросу. . пожалуйста, обратитесь к следующим связанным руководствам: как установить и удалить браузер Microsoft Edge в Linux, как установить и настроить BigBlueButton в Ubuntu Linux 16.04 LTS Xenial Xerus, как настроить SELinux на сервере Linux, краткое введение в Linux и как как создать раздел диска в Ubuntu Linux и как создать, отредактировать, сохранить файл и выйти из редактора Vim в Linux.

В этой статье я расскажу вам, как использовать команды locate , find и grep для поиска файлов. и шаблоны в Linux/Unix-подобных ОС. Прежде чем я продолжу, если вы только начинаете работать с Linux

Первая команда в нашем списке — это команда locate. Команда locate — это самый быстрый и простой способ поиска файлов и каталогов по их именам. При первом использовании команды поиска locate, то есть, если вы только что настроили свою ОС Linux, такую ​​как Ubuntu, вам необходимо установить команду, прежде чем ее можно будет найти для возврата результатов для любого поиск, который вы хотите сделать.

Установка команды locate

В зависимости от дистрибутива Linux и конфигурации системы пакет locate может быть предварительно установлен или не установлен в вашей системе Linux. Чтобы проверить, установлена ​​ли утилита locate, откройте терминал, введите locate и нажмите Enter. Если он установлен, система отобразит locate: нет указанного шаблона для поиска . В противном случае будет возвращено что-то вроде команда поиска не найдена .

Если команда locate не установлена, вы можете легко установить ее с помощью диспетчера пакетов вашего дистрибутива.

Установите команду locate в Ubuntu и Debian

На снимке экрана выше система сообщает, что мой пакет locate был установлен автоматически и больше не требуется. Я использую дистрибутив Ubuntu из семейства Debian. Если вы используете CentOS, см. ниже команду для установки в вашей системе.

Установите locate в CentOS и Fedora

Установив команду locate, давайте посмотрим, как она работает. Команда locate ищет заданный шаблон в файле базы данных, созданном командой updatedb. Найденные результаты отображаются на экране по одному в строке.

Базу данных можно обновить вручную, запустив updateb от имени пользователя root или пользователя с привилегиями sudo:

Синтаксис команды locate следующий:

В моей системе есть текстовый файл под названием «searchcommads.txt». Теперь я хочу знать каталог, в котором находится файл. Для этого я выполню приведенную ниже команду.

Я использовал команду ls для отображения списка файлов pf в моей системе. Это поможет вам узнать точное имя файлов, которые вы хотите найти в своем каталоге с помощью команды locate. На снимке экрана вывод, который показывает каталог для моего файла: /home/imohweb/searchcommands.txt

Прежде чем я перейду к другой популярной поисковой команде find , давайте запустим еще один пример шаблона поиска с помощью команды locate.

Выходные данные будут включать имена всех файлов, содержащих строку .bashrc в своих именах, как показано ниже на снимке экрана.

Файл /root/.bashrc не будет показан, поскольку команда была запущена в обычном пользовательском режиме, у которого нет прав доступа к каталогу /root. Чтобы отобразить /root/.bashrc , выполните следующую команду:

Если список результатов длинный, вы можете направить вывод в команду less для удобства чтения. Например:

Команда locate также принимает шаблоны, содержащие подстановочные символы, такие как подстановочный знак * . Если шаблон не содержит подстановочных символов, команда ищет *PATTERN* . Поэтому в предыдущем примере отображались все файлы, содержащие шаблон поиска в своих именах.

Подстановочный знак — это символ, используемый для обозначения нуля, одного или нескольких символов. Например, чтобы найти все файлы .md в системе, введите:

Чтобы ограничить результаты поиска ради удобочитаемости, используйте параметр -n (флажок тире N), за которым следует количество результатов, которые вы хотите отобразить. Следующая команда выполнит поиск всех файлов .py и отобразит только 5 результатов:

Поиск файлов и шаблонов с помощью команды find

Команда find — один из самых мощных инструментов поиска, используемых системными администраторами Linux.Он ищет файлы и каталоги в иерархии каталогов на основе заданного пользователем выражения и может выполнять указанное пользователем действие над каждым соответствующим файлом.

Команду find можно использовать для поиска файлов и каталогов по их разрешениям, типу, дате, владельцу, размеру и другим параметрам. Его также можно комбинировать с другими инструментами, такими как grep или sed .

Общий синтаксис команды find следующий:

Например, имя моего каталога — /home/imohweb, а имя файла — contactform.html , поэтому мы выполним команду как:

Это всего лишь один из способов использования команд поиска. Есть много других способов сделать команду find одной из самых мощных команд поиска файлов в Linux.

Поиск с помощью команды GREP

Для поиска в файлах чаще всего используется команда grep. Grep расшифровывается как глобальная печать регулярных выражений. Это небольшое семейство команд, которые ищут во входных файлах строку поиска и печатают строки, соответствующие ей. Он обычно используется для печати строк файла, соответствующих шаблонам. Например, рассмотрим файл с именем techdircearchive.txt , используя команду cat, чтобы открыть содержимое файла, а затем выполните следующие команды:

На приведенном выше экране вывода слово "second" — это слово, которое мы искали, а techdirectarchive.txt — это имя файла. Это напечатает слово, соответствующее шаблону поиска, которое равно второму .

Команда grep чувствительна к регистру и напечатает только строку, соответствующую регистру шаблона. Если не учитывать регистр, используется флаг –i.

Выходные данные выше определили, что слово "Pass" чувствительно к регистру и выделено красным цветом.

Команду grep –r можно использовать для рекурсивного поиска шаблона в каталоге. Это особенно полезно, когда вы не знаете, какой файл содержит конкретный шаблон, который вы ищете. В этом примере мы печатаем все файлы, содержащие строку exam в каталоге /home/imohweb. Мы бежим:

На экране вывода все слова, содержащие экзамен, напечатаны и выделены красным цветом.

Использование команды grep -v

Что, если мы хотим сделать обратное, то есть вывести все строки, не соответствующие шаблону поиска. В этом случае мы используем параметр флага –v. Эта опция выводит список всех строк, не содержащих искомую строку или шаблон. В этом случае вторая и пятая строки содержат строку printed, она не выводится на экран вывода. См. экран вывода ниже:

Команды Grep –w

Чтобы выполнить поиск по слову «технология» целиком, используйте команду grep –w после слова «технология» и имени файла, например grep -w technology techdirectarchhiveblog.txt

Сочетание grep –w и -v

Вы также можете комбинировать несколько параметров вместе. Например, чтобы отменить поиск и напечатать все строки одного и того же слова, которые не соответствуют всему слову экзамен, используйте технологию grep –vw, за которой следует имя файла grep –vw tech techdirectarchiveblog.txt. . Будет напечатана только вторая строка текстового файла, содержащая строку technology .

Использование флага grep –A и -B

Наконец, командные флаги тире (-) в верхнем регистре A и тире в верхнем регистре –B можно использовать для печати ряда строк до и после сопоставления с шаблоном.

Например, рассмотрим текстовый файл с названием « list-of-fruit-juice-flavors», т. е. запустив файл cat fruit-juice-flavours.txt (Apple , черника, апельсин и виноград). Чтобы увидеть вкус, который финиширует на один рейтинг ниже вкуса фруктового сока «Яблоко». Выполните команду:

Приведенная выше команда напечатает строку, соответствующую шаблону, и одну строку непосредственно под ней. Образцом в данном случае является Apple. Поэтому мы печатаем первые две строки, как показано на скриншоте ниже:

Аналогично используйте флаг –B, чтобы напечатать строку перед совпадающим шаблоном. В этом примере мы используем grep –B1 с шаблоном 4 (grep –B1 4 filename.txt), и в результате печатается строка, содержащая число 4 и предыдущее. См. приведенную ниже команду:

Обратите внимание, что вместо A1 или B1 вы можете использовать любое положительное целое число с флагом тире –A или –B. Это количество строк будет напечатано до и после соответствующего шаблона.

Команда grep просматривает файл в поисках совпадений с указанным шаблоном. Чтобы использовать его, введите grep , затем шаблон, который мы ищем, и, наконец, имя файла (или файлов), в котором мы ищем. Вывод - это три строки в файле, которые содержат буквы «не».

Как найти имя файла в Linux?

  1. найти . – назовите этот файл.txt. Если вам нужно знать, как найти в Linux файл с именем thisfile. …
  2. найти /home -name *.jpg. Ищите всех. jpg в каталоге /home и под ним.
  3. найти . – введите f -пусто. Найдите пустой файл в текущем каталоге.
  4. найти /home -user randomperson-mtime 6 -iname «.db»

Как искать имена файлов?

Нажмите клавишу Windows , затем введите часть или все имя файла, который вы хотите найти. Советы по поиску файлов см. в разделе советов по поиску. В результатах поиска щелкните заголовок раздела «Документы», «Музыка», «Фотографии» или «Видео», чтобы просмотреть список файлов, соответствующих критериям поиска. Нажмите на имя файла, который хотите открыть.

Что такое команда для поиска файла в Unix?

  1. -name имя-файла — Поиск заданного имени файла. Вы можете использовать такой шаблон, как *. …
  2. -iname имя-файла — аналогично -name, но совпадение не зависит от регистра. …
  3. -user userName — владельцем файла является userName.
  4. -group имя_группы — владельцем группы файла является имя_группы.
  5. -type N — поиск по типу файла.

Как использовать grep для поиска в папке?

Чтобы включить в поиск все подкаталоги, добавьте оператор -r к команде grep. Эта команда выводит совпадения для всех файлов в текущем каталоге, подкаталогах и точный путь с именем файла. В приведенном ниже примере мы также добавили оператор -w для отображения целых слов, но форма вывода осталась прежней.

Как мне найти свой путь в Linux?

Используйте команду echo $PATH для просмотра переменных пути. Используйте find / -name «имя файла» — введите f print, чтобы найти полный путь к файлу. Используйте export PATH=$PATH:/new/directory, чтобы добавить к пути новый каталог.

Как составить список файлов в Linux?

Самый простой способ получить список файлов по имени – это просто вывести их список с помощью команды ls. В конце концов, список файлов по имени (буквенно-цифровой порядок) используется по умолчанию. Вы можете выбрать ls (без подробностей) или ls -l (много подробностей), чтобы определить свое представление.

Как вы используете команду «Найти»?

Команда «Найти» используется для поиска и поиска списка файлов и каталогов на основе условий, которые вы указываете для файлов, соответствующих аргументам. Поиск можно использовать в различных условиях, например, вы можете искать файлы по разрешениям, пользователям, группам, типу файла, дате, размеру и другим возможным критериям.

Как мне найти файл в шпаклевке?

  1. Если вы хотите найти файл в каком-либо каталоге, используйте команду «find /directory -name имя_файла. расширение».
  2. Вы можете найти файл любого типа, например файл php, с помощью команды «find . введите f -name имя файла. php».

Какая команда найдет все файлы без разрешения 777?

Параметр командной строки -perm используется с командой find для поиска файлов на основе разрешений. Вы можете использовать любое разрешение вместо 777, чтобы найти файлы только с этим разрешением. Приведенная выше команда будет искать все файлы и каталоги с разрешением 777 в указанном каталоге.

Какая команда найдет все файлы только для чтения?

вы можете сделать ls -l | грэп ^. r– чтобы найти именно то, что вы просили, «файлы с разрешением только на чтение…»

Как найти файл рекурсивно в Unix?

команда grep: рекурсивный поиск строки во всех файлах

Чтобы игнорировать различия в регистре: grep -ri «слово» . Чтобы отобразить только имена файлов с помощью GNU grep, введите: grep -r -l «foo» .

Что такое команда grep?

grep — это утилита командной строки для поиска наборов данных в виде обычного текста строк, соответствующих регулярному выражению. Его название происходит от команды ed g/re/p (глобальный поиск регулярного выражения и вывод соответствующих строк), которая имеет тот же эффект.

Какая команда используется для идентификации файлов?

Команда file использует файл /etc/magic для идентификации файлов, имеющих магический номер; то есть любой файл, содержащий числовую или строковую константу, указывающую тип. Отображает тип файла myfile (например, каталог, данные, текст ASCII, исходный код программы C или архив).

Точно так же, как многие из нас сейчас используют слово "Google" в качестве глагола, означающего "найти", программисты Unix часто используют слово "grep". «grep» — это сокращение от «global/regular expression/print», обычной последовательности операций в ранних текстовых редакторах Unix. Это также название очень полезной программы командной строки.

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

Навсегда или на пять лет

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

Найдем строки, содержащие слово «не»:

Здесь нет шаблона, который мы ищем.Команда grep ищет в файле совпадения с указанным шаблоном. Чтобы использовать его, введите grep , затем шаблон, который мы ищем, и, наконец, имя файла (или файлов), в котором мы ищем.

Вывод — это три строки в файле, содержащие буквы "не".

По умолчанию grep ищет шаблон с учетом регистра. Кроме того, выбранный нами шаблон поиска не обязательно должен образовывать полное слово, как мы увидим в следующем примере.

Давайте найдем шаблон: "The".

На этот раз выводятся две строки, содержащие буквы «The», одна из которых содержит наш шаблон поиска в более крупном слове «Thesis».

Чтобы ограничить совпадения строками, содержащими слово «The» отдельно, мы можем указать grep с параметром -w. Это ограничит совпадения границами слов.

Позже в этом уроке мы также увидим, как можно изменить поведение команды grep при поиске в зависимости от ее чувствительности к регистру.

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

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

Еще один полезный параметр -n , который нумерует совпадающие строки:

Здесь мы видим, что строки 5, 9 и 10 содержат буквы «it».

Мы можем комбинировать параметры (например, флаги), как и с другими командами Unix. Например, давайте найдем строки, содержащие слово «the». Мы можем комбинировать опцию -w, чтобы найти строки, содержащие слово «the», и -n, чтобы пронумеровать совпадающие строки:

Теперь мы хотим использовать параметр -i, чтобы сделать наш поиск нечувствительным к регистру:

Теперь мы хотим использовать параметр -v, чтобы инвертировать наш поиск, т. е. мы хотим вывести строки, которые не содержат слова «the».

Если мы используем параметр -r (рекурсивный), grep может рекурсивно искать шаблон в наборе файлов в подкаталогах.

Давайте рекурсивно поищем Yesterday в каталоге shell-lesson-data/exercise-data/writing:

grep имеет много других опций. Чтобы узнать, что это такое, мы можем ввести:

Использование grep

Какая команда приведет к следующему выводу:

  1. grep "из" haiku.txt
  2. grep -E "из" haiku.txt
  3. grep -w "из" haiku.txt
  4. grep -i "из" haiku.txt

Решение

Правильный ответ — 3, потому что параметр -w ищет только совпадения целых слов. Другие варианты также будут соответствовать «из», если они являются частью другого слова.

Подстановочные знаки

Однако реальная сила grep заключается не в его параметрах; это происходит из-за того, что шаблоны могут включать подстановочные знаки. (Техническое название для них — регулярные выражения, что означает «re» в «grep».) Регулярные выражения одновременно сложны и мощны; если вы хотите выполнять сложные поиски, посмотрите урок на нашем сайте. Как дегустатор, мы можем найти строки с буквой «о» во второй позиции, например:

Мы используем параметр -E и помещаем шаблон в кавычки, чтобы оболочка не пыталась его интерпретировать. (Если шаблон содержит, например, * , оболочка попытается расширить его перед запуском grep .) Символ ^ в шаблоне привязывает совпадение к началу строки. . соответствует одиночному символу (точно так же, как ? в оболочке), а o соответствует фактическому 'o'.

Отслеживание вида

У Лии есть несколько сотен файлов данных, сохраненных в одном каталоге, каждый из которых имеет следующий формат:

Она хочет написать сценарий оболочки, который принимает вид в качестве первого аргумента командной строки и каталог в качестве второго аргумента. Сценарий должен вернуть один файл с именем spec.txt, содержащий список дат и количество видов, встречавшихся в каждую дату. Например, используя приведенные выше данные, файл rabbit.txt будет содержать:

Расположите эти команды и конвейеры в правильном порядке, чтобы добиться этого:

Подсказка: используйте man grep, чтобы найти, как рекурсивно искать текст в каталоге, и man cut, чтобы выбрать более одного поля в строке.

Пример такого файла предоставляется в оболочке- данные урока/упражнения-данные/количество животных/animals.csv

Решение

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

Сценарий выше можно вызвать следующим образом:

Маленькие женщины

Вы и ваш друг только что закончили читать Маленькие женщины Луизы Мэй Олкотт и спорите.Из четырех сестер в книге, Джо, Мэг, Бет и Эми, ваш друг считает, что Джо была упомянута больше всего. Вы, однако, уверены, что это была Эми. К счастью, у вас есть файл LittleWomen.txt, содержащий полный текст романа (shell-lesson-data/exercise-data/writing/LittleWomen.txt). Используя цикл for, как бы вы подсчитали, сколько раз упоминается каждая из четырех сестер?

Подсказка: в одном из решений могут использоваться команды grep и wc и | , а другой может использовать параметры grep. Часто существует несколько способов решения задачи программирования, поэтому конкретное решение обычно выбирается на основе сочетания получения правильного результата, элегантности, удобочитаемости и скорости.

Решения

Альтернативное, немного худшее решение:

Это решение хуже, потому что команда grep -c сообщает только о количестве совпадающих строк. Общее количество совпадений, о которых сообщает этот метод, будет ниже, если в каждой строке будет более одного совпадения.

Внимательные наблюдатели могли заметить, что имена персонажей иногда появляются в заголовках глав полностью прописными буквами (например, «MEG ИДЕТ НА ЯРМАРКУ Тщеславия»). Если вы хотите подсчитать и их, вы можете добавить параметр -i для нечувствительности к регистру (хотя в этом случае это не повлияет на ответ на вопрос, какая сестра упоминается чаще всего).

В то время как команда grep ищет строки в файлах, команда find находит сами файлы. Опять же, у него много вариантов; чтобы показать, как работают самые простые, мы будем использовать дерево каталогов shell-lesson-data/exercise-data, показанное ниже.

Каталог упражнений-данных содержит один файл, numbers.txt и четыре каталога: Animal-Counts , Creations , Proteins и Writing, содержащие различные файлы.

Для нашей первой команды запустим find . (не забудьте запустить эту команду из папки shell-lesson-data/exercise-data).

Как всегда, файл . сам по себе означает текущий рабочий каталог, откуда мы хотим начать поиск. Вывод find — это имена всех файлов и каталогов в текущем рабочем каталоге. Поначалу это может показаться бесполезным, но в find есть много вариантов фильтрации вывода, и в этом уроке мы познакомимся с некоторыми из них.

Первая опция в нашем списке — это -type d, что означает «вещи, которые являются каталогами». Разумеется, вывод find — это имена пяти каталогов (включая . ):

Обратите внимание, что объекты find не перечислены в определенном порядке. Если мы изменим -type d на -type f , вместо этого мы получим список всех файлов:

Теперь попробуем сопоставить по имени:

Мы ожидали, что он найдет все текстовые файлы, но выводит только ./numbers.txt . Проблема в том, что оболочка расширяет подстановочные знаки, такие как * перед выполнением команд. Так как *.txt в текущем каталоге расширяется до ./numbers.txt , команда, которую мы на самом деле выполнили, была следующей:

find сделал то, что мы просили; мы просто попросили не то.

Чтобы получить то, что мы хотим, давайте сделаем то, что мы сделали с grep : заключим *.txt в кавычки, чтобы оболочка не расширила подстановочный знак *. Таким образом, find на самом деле получает шаблон *.txt , а не расширенное имя файла number.txt :

Список и поиск

ls и find можно заставить делать похожие вещи при наличии правильных параметров, но в обычных обстоятельствах ls перечисляет все, что может, а find ищет вещи с определенными свойствами и показывает их.

Как мы уже говорили ранее, сила командной строки заключается в объединении инструментов. Мы видели, как это сделать с трубами; давайте посмотрим на другую технику. Как мы только что видели, найдите . -name "*.txt" дает нам список всех текстовых файлов в текущем каталоге или ниже него. Как мы можем объединить это с wc -l для подсчета строк во всех этих файлах?

Самый простой способ — поместить команду find внутрь $() :

Когда оболочка выполняет эту команду, первое, что она делает, это запускает то, что находится внутри $() . Затем он заменяет выражение $() выводом этой команды. Поскольку выводом find являются три имени файла ./writing/LittleWomen.txt , ./writing/haiku.txt и ./numbers.txt , оболочка создает команду:

Это то, что мы хотели. Это расширение — именно то, что делает оболочка, когда расширяет подстановочные знаки, такие как * и ? , но позволяет нам использовать любую команду, которую мы хотим, в качестве нашего собственного «шаблона».

Очень распространено совместное использование find и grep. Первый находит файлы, соответствующие шаблону; второй ищет строки внутри тех файлов, которые соответствуют другому шаблону. Здесь, например, мы можем найти файлы txt, содержащие слово «поиск», ища строку «поиск» во всех файлах .txt в текущем каталоге:

Сопоставление и вычитание

  1. найти существ -имя "*.dat" | grep -v единорог
  2. найти существ -имя *.dat | grep -v единорог
  3. grep -v "unicorn" $(найти существ -name "*.dat"))
  4. Ничего из вышеперечисленного.

Решение

Вариант 1. правильный.Заключение выражения соответствия в кавычки предотвращает его расширение оболочкой, поэтому оно передается команде find.

Вариант 2 также работает в этом случае, поскольку оболочка пытается расширить *.dat, но нет *. .dat в текущем каталоге, поэтому выражение с подстановочным знаком передается для поиска . Впервые мы столкнулись с этим в эпизоде ​​3.

Вариант 3 неверен, поскольку он ищет в содержимом файлов строки, которые не соответствуют «единорогу», а не ищет имена файлов.

Двоичные файлы

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

Несколько инструментов расширяют grep для обработки нескольких нетекстовых форматов. Но более универсальный подход заключается в преобразовании данных в текст или извлечении текстовых элементов из данных. С одной стороны, это упрощает выполнение простых вещей. С другой стороны, сложные вещи обычно невозможны. Например, достаточно просто написать программу, которая будет извлекать размеры X и Y из файлов изображений для использования с grep, но как бы вы написали что-то для поиска значений в электронной таблице, ячейки которой содержат формулы?

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

Оболочка Unix старше, чем большинство людей, которые ее используют. Он просуществовал так долго, потому что это одна из самых продуктивных сред программирования из когда-либо созданных — возможно, даже самая продуктивная. Его синтаксис может быть загадочным, но люди, освоившие его, могут интерактивно экспериментировать с различными командами, а затем использовать полученные знания для автоматизации своей работы. Поначалу графические пользовательские интерфейсы могут быть проще в использовании, но после освоения производительность в оболочке становится непревзойденной. И, как писал Альфред Норт Уайтхед в 1911 году, «Цивилизация продвигается вперед, увеличивая количество важных операций, которые мы можем выполнять, не задумываясь о них».

В этом руководстве рассматриваются некоторые из лучших инструментов командной строки, которые используются для поиска совпадающих строк или шаблонов в текстовых файлах. Эти инструменты обычно используются вместе с регулярными выражениями (сокращенно REGEX), которые представляют собой уникальные строки для описания шаблона поиска.

Без лишних слов, давайте приступим.

1. Команда Grep

На первом месте стоит утилита grep — это аббревиатура от Global Regular Expression Print. Это мощный инструмент командной строки, который пригодится при поиске определенной строки или шаблона в файле.

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

  • Поиск строк или совпадающих шаблонов в файле.
  • Поиск строк или совпадающих шаблонов в сжатых файлах.
  • Подсчитать количество совпадений строки.
  • Выведите номера строк, содержащих строку или шаблон.
  • Рекурсивный поиск строки в каталогах.
  • Выполнить обратный поиск (т. е. отобразить результаты строк, не соответствующих критериям поиска).
  • Игнорировать чувствительность к регистру при поиске строк.

Синтаксис использования команды grep довольно прост:

Например, чтобы найти строку «Linux» в файле, скажем, hello.txt, игнорируя регистр символов, выполните команду:

Чтобы получить дополнительные параметры, которые вы можете использовать с grep, просто прочитайте нашу статью, в которой приведены более сложные примеры команд grep.

2. Команда sed

Sed — сокращение от Stream Editor — еще один полезный инструмент командной строки для работы с текстом в текстовом файле. Sed ищет, фильтрует и заменяет строки в заданном файле неинтерактивным способом.

По умолчанию команда sed выводит вывод в STDOUT (Standard Out), что означает, что результат выполнения выводится на терминал, а не сохраняется в файле.

Команда Sed вызывается следующим образом:

Например, чтобы заменить все экземпляры «Unix» на «Linux», вызовите команду:

Если вы хотите перенаправить вывод, а не печатать его на терминале, используйте знак перенаправления ( > ), как показано на рисунке.

Выходные данные команды сохраняются в файле output.txt, а не распечатываются на экране.

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

3. Подтвердить команду

Ack – это быстрый и портативный инструмент командной строки, написанный на Perl. Ack считается удобной заменой утилиты grep и выводит результаты в визуально привлекательном виде.

Команда Подтвердить выполняет поиск в файле или каталоге строк, содержащих соответствие критериям поиска. Затем он выделяет совпадающую строку в строках.
Ack может различать файлы по их расширениям и, в некоторой степени, по содержимому файлов.

Синтаксис команды подтверждения:

Например, чтобы проверить поисковый запрос Linux, выполните:

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

В приведенном ниже примере файл или каталог не были предоставлены, но ack автоматически обнаружил доступный файл и выполнил поиск предоставленного соответствующего шаблона.

Чтобы установить ack в вашей системе, выполните команду:

4. Ок-команда

Awk — это полноценный язык сценариев, а также инструмент для обработки текста и обработки данных. Он ищет файлы или программы, содержащие шаблон поиска. Когда строка или шаблон найдены, awk обрабатывает совпадение или строку и выводит результаты на STDOUT.

Шаблон AWK заключен в фигурные скобки, а вся программа заключена в одинарные кавычки.

Возьмем самый простой пример. Предположим, вы печатаете дату своей системы, как показано ниже:

Предположим, вы хотите распечатать только первое значение — день недели. В этом случае передайте вывод в awk, как показано ниже:

Чтобы отобразить последующие значения, разделите их запятой, как показано:

Приведенная выше команда отобразит день недели и число месяца.

Чтобы получить дополнительные параметры, которые вы можете использовать с awk, просто прочитайте нашу серию команд awk.

5. Серебряный искатель

Silver Searcher – это кроссплатформенный инструмент поиска с открытым исходным кодом, похожий на ack, но с упором на скорость. Это упрощает поиск определенной строки в файлах в кратчайшие сроки:

Например, чтобы найти строку «Linux» в файле hello.txt, выполните команду:

Дополнительные параметры см. на справочных страницах:

6. Рипгреп

И наконец, у нас есть инструмент командной строки ripgrep. Ripgrep — это кроссплатформенная утилита для поиска шаблонов регулярных выражений. Это намного быстрее, чем все ранее упомянутые инструменты поиска, и рекурсивно ищет в каталогах совпадающие шаблоны. С точки зрения скорости и производительности ни один другой инструмент не выделяется так, как Ripgrep.

По умолчанию ripgrep пропускает двоичные файлы/скрытые файлы и каталоги. Также имейте в виду, что по умолчанию он не будет искать файлы, которые игнорируются файлами .gitignore/.ignore/.rgignore.

Ripgrep также позволяет искать определенные типы файлов. Например, чтобы ограничить поиск файлами Javascript, выполните:

Синтаксис использования ripgrep довольно прост:

Например. Чтобы найти экземпляры строки «Linux» в файлах, расположенных внутри текущего каталога, выполните команду:

Чтобы установить ripgrep в вашей системе, выполните следующие команды:

Дополнительные параметры см. на справочных страницах:

Это одни из наиболее широко используемых инструментов командной строки для поиска, фильтрации и обработки текста в Linux. Если у вас есть другие инструменты, которые, по вашему мнению, мы не упомянули, сообщите нам об этом в разделе комментариев.

Если вам понравилась эта статья, подпишитесь на уведомления по электронной почте о руководствах по Linux. Если у вас есть вопросы или сомнения?обратитесь за помощью в разделе комментариев.

Если вы цените то, что мы делаем здесь, в TecMint, вам следует подумать о следующем:

TecMint – это самый быстрорастущий и пользующийся наибольшим доверием сайт сообщества, где можно найти любые статьи, руководства и книги по Linux в Интернете. Миллионы людей посещают TecMint! для поиска или просмотра тысяч опубликованных статей, доступных всем БЕСПЛАТНО.

Если вам нравится то, что вы читаете, купите нам кофе (или 2) в знак признательности.

Читайте также: