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

Учебное пособие по команде Grep с примерами для начинающих

В этом уроке мы познакомимся с командой "grep". Grep означает Global rregular expression print . Как следует из названия, Grep используется для поиска в текстовых файлах с помощью регулярных выражений (сокращенно регулярное выражение). Он печатает строки, соответствующие заданному шаблону, в текстовый файл. Если файл не указан, grep будет рекурсивно искать заданный шаблон в файлах в текущем каталоге. Grep имеет два варианта: egrep и fgrep. Эти варианты устарели, но предусмотрены для обратной совместимости. Вместо использования «grep -E» и «grep -F» вы можете использовать «egrep» и «fgrep» соответственно. Без дальнейших церемоний, давайте начнем.

Примеры команд Grep

У меня есть файл с именем file.txt, содержащий случайные слова. Давайте посмотрим на file.txt:

$ cat file.txt
ostechnix
Ostechnix
o$technix
linux
linus
unix
technology
hello world
HELLO world

Чтобы начать поиск, просто введите grep, а затем укажите, что вы ищете и откуда вы ищете. Например, я собираюсь найти строку "nix" в файле file.txt. Для этого я запускаю:

grep nix file.txt

Пример вывода:

ostechnix
Ostechnix
o$technix
unix

Как вы видите в приведенном выше выводе, мы получили два слова, которые содержат соответствующий шаблон «nix». Если строка поиска состоит из двух слов, укажите их в одинарных кавычках, как показано ниже.

$ grep 'hello world' file.txt 
hello world

Вы также можете использовать флаг -n, чтобы отобразить номера строк в выводе:

grep -n nix file.txt

Пример вывода:

1:ostechnix
2:Ostechnix
3:o$technix
6:unix

Это может быть полезно, когда вы работаете с очень длинным кодом.

Обратите внимание, что grep чувствителен к регистру. Например, при поиске по запросу "os" не будут отображаться строки, содержащие заглавные буквы, например Os.

Проверьте следующий пример.

$ grep os file.txt 
ostechnix

Но в файле file.txt у меня есть еще одно слово под названием «Ostechnix», но grep его не указал.

Однако если вы хотите игнорировать регистрозависимость, вы можете использовать флаг "-i", как показано ниже.

$ grep -i os file.txt 
ostechnix
Ostechn1x
$ grep -i 'hello world' file.txt 
hello world
HELLO world

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

Мы также можем передать вывод команды в grep. Посмотрите на следующий пример.

$ cat file.txt | grep os
ostechnix

Теперь посмотрим, что у нас есть. Вывод файла file.txt передается в grep, и отображаются слова, содержащие буквы «os» в файле file.txt.

Мы также можем использовать некоторые специальные символы или регулярные выражения в grep.

  • ^ — поиск в начале строки.
  • $ — поиск в конце строки.
  • . — поиск по любому символу.

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

Вы уже знаете, что мы можем искать слова, содержащие строку "tech", как показано ниже.

$ grep tech file.txt
ostechnix
Ostechnix
o$technix
technology

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

Чтобы найти слова, соответствующие шаблону «tech» в начале строки файла, выполните:

$ grep ^tech file.txt
technology

Аналогичным образом мы можем искать слова, оканчивающиеся на определенную букву (буквы), например "x", как показано ниже.

$ grep x$ file.txt
ostechnix
Ostechnix
o$technix
linux
unix

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

Например, давайте найдем в файле любое слово, содержащее "n".

$ grep .n file.txt
ostechnix
Ostechnix
o$technix
linux
linus
unix
technology

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

Примеры команд Egrep

egrep означает eрасширенный grep. Она аналогична команде "grep -E". Он будет делать все то же, что и grep. Однако он предоставляет некоторые дополнительные функции, такие как использование сложных регулярных выражений, по сравнению с обычной командой grep «из коробки».

Например, мы можем искать любые слова, начинающиеся с "l" или "o".

Помните, что мы используем символ каретки (^) для поиска слов в начале строки. Следовательно, наша команда для приведенного выше запроса будет такой:

$ egrep '^(l|o)' file.txt
ostechnix
o$technix
linux
linus

Видеть? У нас есть все слова, начинающиеся с «л» или «о». Обратите внимание, что обычная команда grep не может этого сделать.

Точно так же мы можем искать строки, начинающиеся с любого диапазона символов от «l» до «u». Это означает, что мы получим строки, начинающиеся с букв l, m, n, o, p, q, r, s, t и u. Все остальное будет исключено из результата.

$ egrep '^[l-u]' file.txt
ostechnix
o$technix
linux
linus
unix
technology

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

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

egrep '^[l-u]|[L-U]' file.txt

Или,

egrep '^([l-u]|[L-U])' file.txt

Пример вывода:

ostechnix
Ostechnix
o$technix
linux
linus
unix
technology
HELLO world

Видеть? Теперь у нас есть слова, которые начинаются с диапазона символов от «l» до «u» (в верхнем или нижнем регистре).

Примеры команд Fgrep

fgrep означает fast grep. Это похоже на "grep -F". fgrep не распознает регулярные выражения и специальные символы. fgrep можно использовать там, где вы хотите оценивать регулярные выражения.

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

$ grep x$ file.txt
ostechnix
Ostechnix
o$technix
linux
unix

Теперь запустите ту же команду с помощью fgrep.

fgrep x$ file.txt

Он ничего не отобразит, поскольку не может оценить специальные символы.

Теперь давайте посмотрим другой пример. Чтобы найти слова, соответствующие строке "o$", с помощью команды grep, мы делаем:

grep o$ file.txt

Но мы ничего не получаем, почему? Потому что, согласно приведенной выше команде, мы используем символ доллара ($), чтобы найти слова, оканчивающиеся на «о». Поскольку в файле file.txt не было символов, оканчивающихся на «о», мы ничего не получаем.

Теперь запустите ту же команду с помощью fgrep.

$ fgrep o$ file.txt 
o$technix

Видеть? Здесь мы используем команду fgrep. Он просто игнорирует символ доллара (конечно, специальный символ) и отображает слово, содержащее строку «o$».

Для получения более подробной информации о grep введите:

grep --help

Он предложит все возможные варианты. Или обратитесь к справочным страницам.

man grep

Рекомендуем прочитать:

  • Научитесь эффективно использовать справочные страницы

Этимология слова grep

Grep был написан в одночасье Кеном Томпсоном, тем же человеком, который написал Unix. Но почему и как оно получило свое название? Профессор Брайан Керниган объясняет этимологию слова grep в этом видео.

И это все. Grep — одна из важных команд, которую вам следует тщательно изучить.

Теперь вы знаете, что такое grep и как использовать его для поиска текстовых файлов с соответствующими шаблонами в GNU/Linux. Также вы узнали, как Grep получил свое название. Надеюсь, это было полезно.

Статьи по данной тематике