Поиск Grep в файлах с расширением

Обновлено: 28.06.2024


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

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

Найти команду

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

Найти синтаксис команды:

Поиск всех файлов с одним расширением:

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

«.» в этой команде означает, что этот инструмент найдет все файлы «.txt» в текущем каталоге.




Найти файлы «.exe» в той же команде поиска, добавив расширение «*exe».




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




Поиск файлов с несколькими расширениями:

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

Выполнение приведенной ниже команды извлечет файлы с расширениями «.sh» и «.txt»




Найти команду

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

Синтаксис команды поиска:

Поиск файла с определенным расширением, например «.conf», который рассматривается в нашем случае, добавляет путь к каталогу, в котором будет происходить процесс поиска файлов.



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




Точно так же вы можете использовать синтаксис команды locate для поиска всех файлов с любым расширением, например «.txt».


Вывод:

В этом посте рассказывается о двух мощных, но простых утилитах, которые помогут вам найти все файлы с одинаковыми или разными расширениями.Мы познакомили вас с основными понятиями, касающимися команд «найти» и «найти», и показали, как использовать эти два инструмента командной строки Linux для поиска всех файлов с несколькими расширениями.

Об авторе

Талья Саиф Малик

Талья является участником Linux Hint и стремится приносить пользу и делать полезные вещи для всего мира. Он любит читать, писать и говорить о Linux, данных, компьютерах и технологиях.

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

1. Обзор

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

В этом руководстве мы рассмотрим команду grep. Эта команда отлично подходит для быстрого поиска в файлах определенной строки текста.

2. Запуск общего поиска

Мы будем использовать три тестовых файла с расширениями .cc, .h и .txt. Также есть еще одна папка с именем Test с теми же тремя файлами, расположенными внутри:

Синтаксис grep должен соответствовать grep [ОПЦИИ…] ШАБЛОНЫ [ФАЙЛ…], где ШАБЛОН — это текст в ФАЙЛЕ должно совпадать:

Эта команда запускает grep без параметров, шаблон "Hello" и запускает его для каждого файла в локальном каталоге.

Для файлов, соответствующих ШАБЛОНУ, выводится имя файла, за которым следует строка, содержащая соответствующий текст.

Когда команда grep встречает каталог, она указывает имя каталога, за которым следует «Является каталогом». Это можно увидеть выше с Тестовый каталог.

С grep можно использовать множество других параметров. Например, если бы мы использовали параметры -i и -r, мы могли бы указать нечувствительность к тексту, а также настройка grep для рекурсивного поиска:

3. Указание типа файла

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

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

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

Мы можем включить любое количество типов файлов, просто разделив их запятыми.

4. Заключение

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

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

Я работаю над скриптом для поиска определенных каталогов:

Как ограничить результаты только расширениями .h и .cpp ?


Ребята из GNU действительно накосячили, когда добавили -r к grep, чтобы он искал файлы, поскольку это нарушает мантру UNIX о наличии инструментов, которые "делают одно и делают это хорошо". Есть отличный инструмент для поиска файлов с ОЧЕНЬ очевидным именем.

12 ответов 12

Просто используйте параметр --include, например:

Это должно делать то, что вы хотите.

Чтобы получить объяснение из ответа HoldOffHunger ниже:

-n : каждой выходной строке предшествует относительный номер строки в файле

--include \*.cpp : все файлы *.cpp: C++ (экранируйте с помощью \ на тот случай, если у вас есть каталог со звездочками в именах файлов)

./ : Начать с текущего каталога.


Для записи: -r (рекурсивный) -i (игнорировать регистр) --include (искать только те файлы, которые соответствуют шаблону файла)

Похоже, что этот пример имеет высокий балл, потому что он охватывает такой широкий спектр возможностей, но приведенный ниже ответ grep -r --include=*.txt 'searchterm' ./ действительно объясняет суть ответа

почему бы не использовать двойные кавычки вместо обратной косой черты? например: grep -r -i --include="*.h" --include="*.cpp" CP_Image

Некоторые из этих ответов кажутся слишком громоздкими с синтаксисом или вызывают проблемы на моем сервере Debian. Это отлично сработало для меня:

<р>.или версия без учета регистра.

--include : все *.txt: текстовые файлы (экранируйте с помощью \ на тот случай, если у вас есть каталог со звездочками в именах файлов)

'searchterm' : что искать

./ : Начать с текущего каталога.

Вы должны экранировать *, используя \*.cpp или '*.cpp' . В противном случае это не даст ожидаемого результата, когда в рабочем каталоге есть файлы *.txt.

@Melebius, можете ли вы объяснить, почему это нужно экранировать - имеет ли это какое-либо отношение к упомянутым вами расширениям CPP или TXT? Или вы просто использовали их в качестве примеров?

@SimonEast Эти расширения используются в этом вопросе и ответе, в остальном ничего особенного. Вероятно, это будет работать без экранирования при использовании --include=

но важно экранировать * с помощью --include

(пробел вместо = ), что в остальном очень похоже.

<р>. Это также работает с --include

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

Почти, но у меня это не сработало — он продолжал пытаться сопоставить --include=*.foo . Рабочее решение заключало значение --include в кавычки. Например. --include="*.foo" .



Я бы предложил сгруппировать эти аргументы -name. странные вещи могут случиться, если вы этого не сделаете. найти . \( -name '*.h' -o -name '*.cpp' \) -exec grep "CP_Image" <> \; -печать

Я использовал этот метод в течение многих лет, и он работает, но НАМНОГО медленнее, чем рекурсивный grep, поскольку exec find порождает отдельный процесс grep для каждого искомого файла.

Отвечая на комментарий @beaudet, find может дополнительно объединять аргументы, сводя к минимуму количество вызовов вызываемого процесса. найти . \( -name \*.h -o -name \*.cpp \) -exec grep -H CP_Image <> + Это предлагается, но не выделено в ответе @fedorqui ниже и является достойным улучшением. Аргумент -H для grep здесь полезен, когда find идентифицирует только один соответствующий файл. Это может исключить использование -print в ответе. Если ваш общий список файлов достаточно мал, использование рекурсивной оболочки (например, /**/*. ) может быть предпочтительнее.

Информационный аватар участника

348, 4

У меня есть каталог с файлами, оканчивающимися на .log, .mml, .gll, .dll . Как я могу использовать выражения grep только в файлах .log?

Информационный аватар участника

20, 0

Сейчас я не уверен в этом на 100%, но я уверен, что вы можете решить эту проблему с помощью команд конвейера.

ls *.log | grep что угодно

ls *.log найдет только файлы, оканчивающиеся на .log, и любой вывод, который вы получите из этого, переносится с помощью "|" и позволяет вам манипулировать им дальше.

Надеюсь, это помогло.

Информационный аватар участника

345, 21

Но если у вас тысячи файлов, он может сломаться. В этом случае вы можете использовать

Информационный аватар участника

348, 4

Еще 10 обсуждений, которые могут вас заинтересовать

1. UNIX для продвинутых и опытных пользователей

Поиск типов файлов по количеству в определенной папке в RHEL 6

Итак, я пытаюсь найти первые 10 или 15 элементов в каталоге по типу файла. Я хочу запустить команду в каталоге и получить что-то вроде следующего: Пример ожидаемого вывода.. .PDF: 100, .txt: 95, .word: 80.. Как лучше всего это сделать? Я искал вокруг. (2 ответа)

Обсуждение начато: shackle101

2. Программирование оболочки и создание сценариев

Grep файл журнала, начиная с определенного времени до конца файла

У меня есть файл журнала, в котором в начале каждой строки есть дата и время. Мне нужно искать файл журнала, начиная с определенного времени до конца файла. Например: Начальная точка: 29 июля 2018 г., 21:00:00. Конечная точка: конец файла. Меня беспокоит, что если шаблон «29 июля 2018 г., 21:00:00». (3 ответа)

Обсуждение начато: erin00

3. Программирование оболочки и создание сценариев

Копирование определенных типов файлов в определенные папки

Я пытаюсь написать сценарий, который циклически проходит через папку, содержащую множество папок, и когда внутри каждой из них предполагается копирование всех файлов .fna.gz в папку в другом месте, если файл и соответствующая папка имеют одно и то же имя. для fldr в /home/playground/genomes/* ; найти . (8 ответов)

Обсуждение начато: Mr_Keystrokes

4. UNIX для начинающих: вопросы и ответы

Помощь с определенной датой Grep из одного файла в новый

Привет всем! Первый пост, мало что знаю о Linux/Unix, но мне нужна помощь. Обычно я делаю grep «то, что я ищу» FILE> file.txt, чтобы я мог извлечь данные из одного файла и поместить их в новый. У меня проблема с конкретными датами, так как поле даты равно 4, и оно появляется. (3 ответа)

Обсуждение начато: DennisG34

5. Программирование оболочки и создание сценариев

Grep в определенном файле в архиве

Привет всем, мне нужно выполнить grep в определенном файле внутри нескольких архивов (tar.gz). Я знаю, что zgrep может grep в архиве, но, насколько я знаю, я не могу указать конкретное имя файла внутри архива для grep. Есть ли какой-либо другой способ сделать это, кроме его извлечения и затем. (1 ответ)

Обсуждение начато: Subbeh

6. UNIX для продвинутых и опытных пользователей

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

Могу ли я подсказать, как выполнить рекурсивный grep с определенными типами файлов? Я хочу использовать следующие типы файлов: *.c и *.java. Я знаю, что это обычно работает со всеми файлами. grep -riI 'scanner' /home/bob/ 2>/dev/null Просто не знаю, как заставить работать файлы *.c и *.java. (5 ответов)

Обсуждение начато: cokedude

7. Домашние и курсовые вопросы

Помощь в использовании различных типов GREP

<р>1. Постановка задачи, все переменные и заданные/известные данные: Привет, я новичок в использовании Unix, так как я только что начал курс по нему в своем университете, и в настоящее время я работаю с рабочим листом, который фокусируется на многих командах и методах. из GREP (я работаю через команду терминала. (11 ответов)

Обсуждение начато: SilvarHawke

8. UNIX для чайников, вопросы и ответы

получить определенный IP-адрес из файла

Все, я новичок в unix, и у меня есть 1 требование, может ли кто-нибудь помочь мне, пожалуйста, я предоставил файл ниже, у меня будут аналогичные файлы в более чем 100 клиентских системах. я хочу проверить IP-адрес «192.168.208.40», и если он присутствует, я должен получить оповещение по электронной почте, если IP-адреса нет. (1 ответ)

Обсуждение начато: будет определено

9. Программирование оболочки и создание сценариев

Помощь с grep в определенном поле файла

привет, я хочу найти определенную строку в определенной строке файла и узнать ее количество. например: samp.txt ABC 1234 BELL HNZ 4567 RING NNN 5673 BELL Помогите, пожалуйста, с командой найти количество BELL в приведенном выше файле samp.txt в конкретной строке 10 с. (7 ответов)

Обсуждение начато: techmoris

10. Программирование оболочки и создание сценариев

grep для определенной строки файла

Привет, как мы можем искать слово (с игнорированием регистра) в определенных номерах строк, например: Awk /^regEX/ с условием в первой или второй строке Awk/^ regex1/ в строке 1 Awk /^regEX2/ в строка 3 заранее спасибо (4 ответа)

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

Синтаксис

Шаблон должен быть словом или символом, который необходимо найти в файле.

Предпосылки

Для успешной работы Grep в вашей системе у вас должна быть установлена ​​операционная система Linux. После настройки вы предоставите пользователю информацию, чтобы иметь права доступа к установленным приложениям. Двигаясь вперед, перейдите в командную строку терминала с помощью сочетания клавиш Ctrl+Alt+T.


Установка Grep

Если вы еще не установили Grep, вы можете установить репозитории Grep в Ubuntu с помощью этой команды.

Руководство по Grep

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


Некоторые примеры, помогающие понять функциональность Grep, следующие:

-И различия по делу игнорируются

-n вывести номер строки с выводом

-r искать во всех каталогах в Linux

–color Отображение совпадающего результата в цветах


Показать все файлы

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

Вы просто используете команду «ls», чтобы отобразить все созданные файлы.


Создание файла, если он еще не существует

Чтобы понять функциональность поиска файла, нам нужно создать файл или файлы в нашей системе. Если у вас нет файлов, вам следует создать файлы. Файл в Linux создается более чем одним способом. Простой метод, который мы собираемся использовать, описан ниже.

Эхо-слово используется для отображения данных в команде Linux. Используя эту команду, пользователь сможет создать файл и ввести в него данные с помощью той же команды. В конкретном примере имя файла — file20.txt. Поскольку файл содержит текст, мы использовали расширение файла «.txt».


Аналогично другой пример создания файла: мы создали более одного файла одновременно.


Поиск в файле по слову

Файл в Linux можно искать по слову. Синтаксис вполне понятен.

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


Поиск файла с помощью «-l»

«-l» — это команда, используемая для отображения только имен файлов в Linux.

Как и в упомянутой выше команде, «мой» — это слово, которое мы хотим искать в файлах. Как мы описали выше, «файл*» означает поиск во всех файлах, созданных в системе. Мы можем заметить, что есть четыре имени файла с расширением .txt и одно без расширения. Это означает, что показаны все файлы, содержащие определенные слова. Далее мы увидим, как конкретно мы можем искать файл, упоминая расширение.


Поиск файла по расширению файла

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

Это основное различие между двумя последними примерами, которое проводится через расширение файла.


Поиск файла с помощью «-e»

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

Grep, Aqsa и Technical — три слова, обозначающие файлы поиска. Все эти слова выделяются везде, где эти слова встречаются в конкретных файлах. Имена файлов указаны в начале. Существует возможность существования только одного слова в файле.


Поиск данных в одном файле

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

В этом примере команда извлекает все данные с помощью слова в файле.


Поиск данных в нескольких файлах

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


Показать наличие Word в файле

Чтобы проверить существование файла или наличие слов в файле. Используется флаг «-q», и он работает для поиска определенных терминов во всех файлах, которые отображают «1» или «0» в качестве вывода. Если приходит «1», это означает, что совпадения нет, но если совпадение найдено, отображается «0».


Заключение

Мы подробно объяснили каждый пример, чтобы предоставить пользователям информацию. Он будет применяться к файлу Grep, который легко ищет файлы и файлы в среде Linux.

Об авторе

Акса Ясин

Я целеустремленный профессионал в области информационных технологий и обожаю писать. Я технический писатель и люблю писать для всех разновидностей Linux и Windows.

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