grep

Использование grep (и egrep) с регулярными выражениями

Использование grep (и egrep) с регулярными выражениями
В этом руководстве описывается, как использовать оба grep (а также egrep) тo находить текст в файлах в их простой форме и в сочетании с регулярными выражениями. Он содержит несколько Примеры а также упражнения, плюс решения, для зрителя, чтобы завершить.

Название grep происходит от команды ed (и vim) «g / re / p», что означает глобальный поиск данного регулярного выражения и печать (отображение) вывода.

Обычный Выражения

Утилиты позволяют пользователю искать в текстовых файлах строки, соответствующие регулярному выражению (регулярное выражение). Регулярное выражение - это строка поиска, состоящая из текста и одного или нескольких специальных символов из 11. Простой пример - сопоставление начала строки.

Образец файла

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

С помощью редактора, такого как nano или vim, скопируйте приведенный ниже текст в файл с именем мой файл.

xyz
xyzde
exyzd
dexyz
d?gxyz
xxz
xzz
х \ г
х * г
xz
х г
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz

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

Прежде чем пробовать примеры, просмотрите образец файла:

$ cat myfile

Простой поиск

Чтобы найти текст xyz в файле, выполните следующее:

$ grep xyz myfile

Использование цветов

Для отображения цветов используйте -color (двойной дефис) или просто создайте псевдоним. Например:

$ grep --color xyz myfile

или же

$ псевдоним grep = 'grep --color'
$ grep xyz myfile

Параметры

Общие параметры, используемые с grep команда включает:

Например:

$ grep -i xyz myfile # найти текст независимо от регистра
$ grep -ic xyz myfile # подсчитывать строки с текстом
$ grep -in xyz myfile # показать номера строк

Создать несколько файлов

Прежде чем пытаться искать несколько файлов, сначала создайте несколько новых файлов:

$ echo xyz> myfile1
$ echo -e «xyz \ nxzz \ nXYZ»> myfile2
$ echo -e «xxx \ nyyy»> myfile3
$ cat myfile1
$ cat myfile2
$ cat myfile3

Искать в нескольких файлах

Для поиска в нескольких файлах с использованием имен файлов или подстановочного знака введите:

$ grep -ic xyz myfile myfile1 myfile2 myfile3
$ grep -в xyz мой * 
# совпадают имена файлов, начинающиеся с 'my'

Упражнение I

  1. Сначала посчитайте, сколько строк в файле / etc / passwd.
Подсказка: используйте wc -l / etc / passwd
  1. Теперь найдите все вхождения текста вар в файле / etc / passwd.
  2. Найдите, сколько строк в файле содержит текст
  3. Найдите, сколько строк НЕ содержат текст вар.
  4. Найдите запись для вашего логина в / etc / passwd

Решения для упражнений можно найти в конце этой статьи.

Использование регулярных выражений

Команда grep также может использоваться с регулярными выражениями, используя один или несколько из одиннадцати специальных символов или символов для уточнения поиска. Регулярное выражение - это символьная строка, которая включает специальные символы, позволяющие сопоставить шаблон в таких утилитах, как grep, vim а также sed. Обратите внимание, что строки, возможно, потребуется заключить в кавычки.

Доступные специальные символы:

^ Начало строки
$ Конец строки
. Любой символ (кроме \ n новой строки)
* 0 или более предыдущего выражения
\ Предшествующий символу делает его буквальным символом

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

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

Примеры

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

$ grep '^ xyz' мой файл

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

$ grep 'xyz $' мой файл

Чтобы найти строки, содержащие строку с использованием символов ^ и $:

$ grep '^ xyz $' мой файл

Чтобы найти строки с помощью . для соответствия любому персонажу:

$ grep '^ x.z 'myfile

Чтобы найти строки, использующие * для соответствия 0 или более из предыдущего выражения:

$ grep '^ xy * z' мой файл

Чтобы найти строки, используя .* для соответствия 0 или более любых символов:

$ grep '^ x.* z 'myfile

Чтобы найти строки с помощью \ чтобы избежать символа *:

$ grep '^ x \ * z' мой файл

Чтобы найти символ \, используйте:

$ grep '\\' мой файл

Выражение grep - egrep

В grep команда поддерживает только подмножество доступных регулярных выражений. Однако команда egrep:

Обратите внимание, что выражения должны быть заключены в пару кавычек.

Чтобы использовать цвета, используйте -color или снова создайте псевдоним:

$ псевдоним egrep = 'egrep --color'

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

| Чередование того или другого
(…) Логическая группировка части выражения
$ egrep '(^ корень | ^ uucp | ^ mail)' / etc / passwd

При этом из файла извлекаются строки, начинающиеся с root, uucp или mail, | символ, означающий любой из вариантов.

Следующая команда будет нет работают, хотя сообщение не отображается, так как основная grep команда не поддерживает все регулярные выражения:

$ grep '(^ корень | ^ uucp | ^ mail)' / etc / passwd

Однако в большинстве систем Linux команда grep -E то же самое, что и использование egrep:

$ grep -E '(^ ​​корень | ^ uucp | ^ mail)' / etc / passwd

Использование фильтров

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

Команды, которые появляются в конвейере, часто называют фильтрами, поскольку во многих случаях они просеивают или изменяют переданный им ввод перед отправкой измененного потока на стандартный вывод.

В следующем примере стандартный вывод из ls -l передается как стандартный ввод в grep команда. Выход из grep затем передается в качестве входных данных в более команда.

Это отобразит только каталоги в /так далее:

$ ls -l / etc | grep '^ d' | подробнее

Следующие команды являются примерами использования фильтров:

$ ps -ef | grep cron

$ who | grep kdm

Образец файла

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

С помощью редактора, такого как nano или vim, скопируйте приведенный ниже текст в файл с именем люди:

Личный J.Смит 25000
Личный E.Смит 25400
Тренинг А.Коричневый 27500
Тренинг C.Брауэн 23400
(Админ) R.Брон 30500
Гудсоут Т.Смит 30000
Личный F.Джонс 25000
обучение * C.Эванс 25500
Гудзоут W.Папа 30400
Первый этаж T.Смайт 30500
Личный J.Малер 33000

Упражнение II

  1. Показать файл люди и изучить его содержимое.
  2. Найдите все строки, содержащие строку Смит в файле люди.Подсказка: используйте команду grep, но помните, что по умолчанию она чувствительна к регистру.
  3. Создайте новый файл npeople, содержащий все строки, начинающиеся со строки Личное в файле людей.Подсказка: используйте команду grep с>.
  4. Подтвердите содержимое файла npeople, указав файл.
  5. Теперь добавьте все строки, где текст заканчивается строкой 500 в файле люди в файл npeople.Подсказка: используйте команду grep с >>.
  6. Снова подтвердите содержимое файла npeople, указав файл.
  7. Найдите IP-адрес сервера, который хранится в файле / etc / hosts.Подсказка: используйте команду grep с $ (имя хоста)
  8. Использовать egrep извлечь из / etc / passwd строки учетной записи файла, содержащие lp или ваш собственный ID пользователя.

Решения для упражнений можно найти в конце этой статьи.

Больше регулярных выражений

Регулярное выражение можно рассматривать как подстановочные знаки на стероидах.

Есть одиннадцать символов со специальным значением: открывающая и закрывающая квадратные скобки [], обратная косая черта \, каретка ^, знак доллара $, точка или точка ., вертикальная черта или вертикальная черта |, вопросительный знак ?, звездочка или звездочка *, знак плюса + и открывающая и закрывающая круглые скобки . Эти специальные символы также часто называют метасимволами.

Вот полный набор специальных символов:

^ Начало строки
$ Конец строки
. Любой символ (кроме \ n новой строки)
* 0 или более предыдущего выражения
| Чередование того или другого
[…] Явный набор символов для соответствия
+ 1 или более из предыдущего выражения
? 0 или 1 предыдущего выражения
\ Предшествующий символу делает его буквальным символом
Явная нотация кванторов
(…) Логическая группировка части выражения

Версия по умолчанию grep имеет только ограниченную поддержку регулярных выражений. Чтобы все следующие примеры работали, используйте egrep вместо этого или grep -E.

Чтобы найти строки с помощью | чтобы соответствовать любому выражению:

$ egrep 'xxz | xzz' myfile

Чтобы найти строки, используя | чтобы соответствовать любому выражению в строке, также используйте ():

$ egrep '^ x (Yz | yz)' мой файл

Чтобы найти строки с помощью [], соответствующие любому символу:

$ egrep '^ x [Yy] z' мой файл

Чтобы найти строки с помощью [], НЕ совпадающие ни с одним символом:

$ egrep '^ x [^ Yy] z' мой файл

Чтобы найти строки с использованием * для соответствия 0 или более из предыдущего выражения:

$ egrep '^ xy * z' мой файл

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

$ egrep '^ xy + z' мой файл

Чтобы найти строки с помощью ? чтобы соответствовать 0 или 1 в предыдущем выражении:

$ egrep '^ xy?z 'myfile

Упражнение III

  1. Найдите все строки, содержащие имена Эванс или же Maler в файле люди.
  2. Найдите все строки, содержащие имена Смит, Смит или же Смайт в файле люди.
  3. Найдите все строки, содержащие имена Браун, Брауэн или же Брон в файле люди.Если у вас есть время:
  4. Найдите строку, содержащую строку (админ), включая скобки, в файле люди.
  5. Найдите в файле people строку, содержащую символ *.
  6. Объедините 5 и 6 выше, чтобы найти оба выражения.

Больше примеров

Чтобы найти строки, используя . и * для соответствия любому набору символов:

$ egrep '^ xy.* z 'myfile

Чтобы найти строки с помощью для соответствия количеству N символов:

$ egrep '^ xy 3 z' мой файл
$ egrep '^ xy 4 z' мой файл

Чтобы найти строки с помощью для соответствия N или более раз:

$ egrep '^ xy 3, z' мой файл

Чтобы найти строки с помощью для совпадения N раз, но не более M раз:

$ egrep '^ xy 2,3 z' мой файл

Заключение

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

Следующие шаги

Я надеюсь, что вы примените полученные здесь знания с пользой. Проверять grep команды над вашими данными и помните, что описанные здесь регулярные выражения могут использоваться в той же форме в vi, sed а также awk!

Решения для упражнений

Упражнение I

Сначала посчитайте, сколько строк в файле / etc / passwd.
$ wc -l / etc / passwd
Теперь найдите все вхождения текста вар в файле / etc / passwd.
$ grep var / etc / passwd
Найдите, сколько строк в файле содержит текст вар

grep -c var / etc / passwd

Найдите, сколько строк НЕ содержат текст вар.

grep -cv var / etc / passwd

Найдите запись для вашего логина в / etc / passwd файл
grep kdm / etc / passwd

Упражнение II

Показать файл люди и изучить его содержимое.
$ кошачьи люди
Найдите все строки, содержащие строку Смит в файле люди.
$ grep 'Smith' люди
Создать новый файл, люди, содержащий все строки, начинающиеся со строки Личное в люди файл
$ grep '^ Personal' люди> npeople
Подтвердите содержимое файла npeople перечислив файл.
$ cat npeople
Теперь добавьте все строки, где текст заканчивается строкой 500 в файле люди в файл люди.
$ grep '500 $' человек >> человек
Снова подтверждаем содержимое файла люди перечислив файл.
$ cat npeople
Найдите IP-адрес сервера, который хранится в файле / etc / hosts.
$ grep $ (имя хоста) / etc / hosts
Использовать egrep извлечь из / etc / passwd строки учетной записи файла, содержащие lp или ваш собственный идентификатор пользователя.
$ egrep '(lp | kdm :)' / etc / passwd

Упражнение III

Найдите все строки, содержащие имена Эванс или же Maler в файле люди.
$ egrep 'Evans | Maler' люди
Найдите все строки, содержащие имена Смит, Смит или же Смайт в файле люди.
$ egrep 'Sm (i | y)?' люди
Найдите все строки, содержащие имена коричневый, Browen или же Брон в файле люди.
$ egrep 'Бровь?е?п 'люди
Найдите строку, содержащую строку (админ), включая скобки, в файле люди.

$ egrep '\ (Admin \)' люди

Найдите строку, содержащую символ * в файле люди.
$ egrep '\ *' люди
Объедините 5 и 6 выше, чтобы найти оба выражения.

$ egrep '\ (Admin \) | \ *' люди


Как разработать игру в Linux
Десять лет назад не многие пользователи Linux могли бы предсказать, что их любимая операционная система однажды станет популярной игровой платформой д...
Порты коммерческих игровых движков с открытым исходным кодом
Бесплатные игры с открытым исходным кодом и кроссплатформенные версии игрового движка можно использовать для игры как в старые, так и в некоторые из с...
Лучшие игры с командной строкой для Linux
Командная строка - не только ваш главный союзник при использовании Linux - она ​​также может быть источником развлечений, потому что вы можете использ...