Как выполняется поиск файлов с использованием шаблонов
Обновлено: 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?
- найти . – назовите этот файл.txt. Если вам нужно знать, как найти в Linux файл с именем thisfile. …
- найти /home -name *.jpg. Ищите всех. jpg в каталоге /home и под ним.
- найти . – введите f -пусто. Найдите пустой файл в текущем каталоге.
- найти /home -user randomperson-mtime 6 -iname «.db»
Как искать имена файлов?
Нажмите клавишу Windows , затем введите часть или все имя файла, который вы хотите найти. Советы по поиску файлов см. в разделе советов по поиску. В результатах поиска щелкните заголовок раздела «Документы», «Музыка», «Фотографии» или «Видео», чтобы просмотреть список файлов, соответствующих критериям поиска. Нажмите на имя файла, который хотите открыть.
Что такое команда для поиска файла в Unix?
- -name имя-файла — Поиск заданного имени файла. Вы можете использовать такой шаблон, как *. …
- -iname имя-файла — аналогично -name, но совпадение не зависит от регистра. …
- -user userName — владельцем файла является userName.
- -group имя_группы — владельцем группы файла является имя_группы.
- -type N — поиск по типу файла.
Как использовать grep для поиска в папке?
Чтобы включить в поиск все подкаталоги, добавьте оператор -r к команде grep. Эта команда выводит совпадения для всех файлов в текущем каталоге, подкаталогах и точный путь с именем файла. В приведенном ниже примере мы также добавили оператор -w для отображения целых слов, но форма вывода осталась прежней.
Как мне найти свой путь в Linux?
Используйте команду echo $PATH для просмотра переменных пути. Используйте find / -name «имя файла» — введите f print, чтобы найти полный путь к файлу. Используйте export PATH=$PATH:/new/directory, чтобы добавить к пути новый каталог.
Как составить список файлов в Linux?
Самый простой способ получить список файлов по имени – это просто вывести их список с помощью команды ls. В конце концов, список файлов по имени (буквенно-цифровой порядок) используется по умолчанию. Вы можете выбрать ls (без подробностей) или ls -l (много подробностей), чтобы определить свое представление.
Как вы используете команду «Найти»?
Команда «Найти» используется для поиска и поиска списка файлов и каталогов на основе условий, которые вы указываете для файлов, соответствующих аргументам. Поиск можно использовать в различных условиях, например, вы можете искать файлы по разрешениям, пользователям, группам, типу файла, дате, размеру и другим возможным критериям.
Как мне найти файл в шпаклевке?
- Если вы хотите найти файл в каком-либо каталоге, используйте команду «find /directory -name имя_файла. расширение».
- Вы можете найти файл любого типа, например файл 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
Какая команда приведет к следующему выводу:
- grep "из" haiku.txt
- grep -E "из" haiku.txt
- grep -w "из" haiku.txt
- 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 в текущем каталоге:
Сопоставление и вычитание
- найти существ -имя "*.dat" | grep -v единорог
- найти существ -имя *.dat | grep -v единорог
- grep -v "unicorn" $(найти существ -name "*.dat"))
- Ничего из вышеперечисленного.
Решение
Вариант 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) в знак признательности.
Читайте также: