Команды Linux · 2 min read · Sep 14, 2025

Учебник по команде fgrep в Linux для начинающих (с примерами)

Хотя grep является известной командой Linux (мы уже подробно ее рассмотрели), знаете ли вы, что существуют две разные варианта этого инструмента? Да, это egrep и fgrep. В этом учебнике мы обсудим последний (fgrep), используя простые для понимания примеры. Но прежде чем мы это сделаем, стоит упомянуть, что все примеры и инструкции, упомянутые в этом учебнике, были протестированы на Ubuntu 16.04LTS.

Команда fgrep в Linux

Если вы посмотрите на официальную документацию, страница man для команды grep говорит, что fgrep — это просто grep -F. Она также говорит, что такие варианты, как fgrep и egrep, предоставляются только для обратной совместимости. Мы коснемся этих деталей позже в этом учебнике.

Тем временем, вот синтаксис fgrep (который такой же, как и у grep):

grep [OPTIONS] PATTERN [FILE...]

А вот как страница man команды grep объясняет инструмент:

grep ищет в указанных входных FILEs строки, содержащие совпадение с заданным PATTERN. Если файлы не указаны, или если указан файл "-", grep ищет в стандартном вводе. По умолчанию grep выводит совпадающие строки.

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

Вопрос 1. Чем fgrep отличается от grep и egrep?

Команда fgrep отличается от grep и egrep тем, что она интерпретирует PATTERN как список фиксированных строк (вместо регулярных выражений), разделенных переводами строк.

Поскольку говорится, что это то же самое, что и grep -F, вот как эксперт объяснил опцию -F grep на StackExchange:

Ключ `-F` переключает grep в другой режим, где он принимает шаблон для поиска, но затем разбивает этот шаблон на одну строку поиска на строку и выполняет поиск по OR на любые из строк, не выполняя никакого специального сопоставления шаблонов.

Вопрос 2. Как использовать fgrep?

Чтобы понять использование fgrep, давайте сначала рассмотрим базовый пример. Предположим, есть файл (file1), который содержит следующие данные:

И есть другой файл (words.txt), который содержит список слов, которые мы хотим искать в file1.

Итак, вот как вы можете использовать fgrep для выполнения этого поиска:

fgrep -f words.txt file1

Таким образом, вы можете увидеть, что найденные слова были выделены красным цветом. Теперь некоторые из вас могут утверждать, что именно так и поступили бы grep и egrep в этом случае, тогда чем же fgrep отличается?

Во-первых, да, вы правы. Команды grep и egrep также выдали бы аналогичный вывод:

Но разница станет очевидной, если file1 и words.txt содержат следующие данные (обратите внимание на специальные символы в словах):

Здесь egrep и grep не смогут найти все слова:

Но fgrep сработает как задумано:

Вопрос 3. Действительно ли нет разницы между fgrep и grep?

Согласно официальной документации, между fgrep и командой grep -F нет никакой разницы. Однако, как сообщается, существует одно главное отличие между двумя инструментами: алгоритм сопоставления строк, который они используют. В то время как fgrep использует алгоритм Aho-Corasick, grep использует модифицированную версию Commentz-Walter.

“Это означает, что grep имеет худший случай сложности O(mn), в то время как fgrep в худшем случае O(m+n)”, говорит эксперт на форумах StackExchange.

Заключение

Как видно, команда fgrep несложна для понимания и использования. Что касается различий между fgrep и grep -F, хотя мы уже отметили эти моменты в вопросе 3, мы считаем, что этот вопрос не должен беспокоить большую часть пользователей. Если у вас есть сомнения или есть вопрос, связанный с fgrep, поделитесь им с нами, оставив комментарий ниже.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.