Поиск по сайту:

Как использовать команду fgrep для поиска текстовых строк в файлах


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

Поиск текста — одна из наиболее часто выполняемых операций. Однако эта простая задача быстро становится трудоемкой, если пользователи не знакомы с правильными инструментами. В Linux существуют различные утилиты фильтрации текста, такие как awk, sed, cut и т. д.

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

Команда fgrep в Linux относится к семейству команд grep. Однако он используется для поиска шаблона фиксированной строки вместо регулярных выражений. Следовательно, имя команды — fgrep (Fixed GREP).

Синтаксис команды fgrep аналогичен синтаксису других команд семейства grep:

fgrep [OPTIONS] PATTERNS [FILES]

Для начала давайте создадим простой текстовый файл со следующим содержимым в качестве примера:

cat input.txt

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

1. Чем fgrep отличается от команд grep и egrep?

Как следует из названия, команда fgrep используется для поиска шаблонов фиксированных строк. Он интерпретирует шаблон как фиксированную строку, а не как регулярное выражение. Следовательно, он выполняет операцию поиска эффективно по времени.

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

Это простое регулярное выражение соответствует любому отдельному символу, кроме конца строки:

grep ha. input.txt

В приведенном выше выводе мы видим, что символ точки (.) соответствует тексту har, hat и has . .

Теперь давайте воспользуемся тем же шаблоном с командой fgrep и посмотрим на результат:

fgrep ha. input.txt

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

Это происходит потому, что команда fgrep не распознает регулярные выражения и пытается найти несуществующий шаблон — “ha. .

2. Как искать шаблон в файле

Начнем с простого примера, где мы будем искать строку Professional в файле input.txt:

fgrep professionals input.txt

Как мы видим, сопоставление с образцом выполнено успешно в двух местах и выделено красным цветом.

3. Как установить цвет вывода Grep для совпадающих шаблонов

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

Давайте присвоим значение 32 переменной среды GREP_COLOR, чтобы выделить соответствующий шаблон зеленым цветом:

export GREP_COLOR=32
fgrep professionals input.txt

Теперь, прежде чем перейти к следующему примеру, отключите переменную среды GREP_COLOR, чтобы включить поведение по умолчанию:

unset GREP_COLOR

4. Как искать несколько шаблонов в файле

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

Давайте создадим текстовый файл, содержащий несколько шаблонов в отдельной строке:

cat pattern.txt

professionals
website

Теперь давайте используем этот файл с опцией -f для сопоставления нескольких шаблонов:

fgrep -f pattern.txt input.txt

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

5. Как ограничить количество совпадений в файле

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

Однако иногда нам необходимо ограничить количество совпадений. В таких случаях мы можем использовать опцию -m с командой:

fgrep -m 1 professionals input.txt

TecMint was started on 15th August 2012 by technical professionals and all the

В этом примере команда fgrep останавливает обработку файла после соответствия первому шаблону.

6. Как распечатать имя файла при поиске шаблона

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

fgrep -l professionals input.txt

input.txt

Здесь мы видим, что команда просто печатает имя файла вместо строк с совпадающими шаблонами.

7. Как распечатать имя файла при сбое сопоставления с образцом

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

Попробуем найти в файле несуществующий паттерн и наблюдать за результатом:

fgrep -L non-existing-word input.txt

input.txt

В этом примере мы использовали опцию -L команды, которая печатает имя файла, если сопоставление с образцом не удалось.

8. Как подавить сообщения об ошибках

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

В fgrep мы можем использовать параметр -s, который подавляет ошибки, связанные с несуществующими или нечитаемыми файлами. Чтобы лучше понять это поведение, попробуем поискать закономерность в несуществующем файле:

fgrep -s professionals non-existing-file.txt
echo $?

2

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

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

chmod 000 input.txt 
ls -l input.txt

Теперь попробуйте найти закономерность и наблюдать за результатом:

fgrep -s professionals input.txt 
echo $?

9. Как исключить частично совпадающие линии

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

fgrep -nx "the same site is sometimes hard to find." input.txt

В приведенном выше выводе точное совпадение строк происходит в строке номер 20.

10. Как исключить файлы при рекурсивном поиске

Иногда нам нужно пропустить определенные файлы при выполнении операций поиска. В таких случаях мы можем использовать опцию --exclude команды fgrep.

Чтобы понять это, сначала создайте каталог и скопируйте в него несколько файлов-примеров:

mkdir dir-1
cp input.txt dir-1/input.txt
cp input.txt dir-1/input.data
cp input.txt dir-1/input.md 

Теперь поищем шаблон во всех файлах каталога dir-1, кроме файлов “.txt”:

fgrep -r --exclude *.txt professionals dir-1

В приведенном выше выводе мы видим, что сопоставление с образцом было выполнено для файлов с расширениями “.md ” и “.data ”.

11. Как исключить несколько типов файлов при рекурсивном поиске

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

Итак, давайте создадим текстовый файл, содержащий несколько шаблонов исключения в отдельной строке:

cat skip-pattern.txt 
*.txt
*.data

Теперь давайте используем этот файл с опцией --exclude-from:

fgrep -r --exclude-from skip-pattern.txt professionals dir-1

Здесь мы видим, что сопоставление с образцом выполнялось только для файлов с расширениями “.md ”.

12. Как включать файлы при рекурсивном поиске

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

Давайте воспользуемся опцией --include команды fgrep для выполнения поиска по файлам с расширением “*.txt”:

fgrep -r --include "*.txt" professionals dir-1

В приведенном выше выводе мы видим, что сопоставление с образцом пропускается для файлов с расширениями “*.md ” и “*.data ”.

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

Знаете ли вы какой-нибудь другой лучший пример команды fgrep в Linux? Поделитесь с нами своим мнением в комментариях ниже.