Учебное пособие по команде 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 получил свое название. Надеюсь, это было полезно.