Название grep происходит от команды ed (и vim) «g / re / p», что означает глобальный поиск данного регулярного выражения и печать (отображение) вывода.
Обычный Выражения
Утилиты позволяют пользователю искать в текстовых файлах строки, соответствующие регулярному выражению (регулярное выражение). Регулярное выражение - это строка поиска, состоящая из текста и одного или нескольких специальных символов из 11. Простой пример - сопоставление начала строки.
Образец файла
Основная форма grep может использоваться для поиска простого текста в определенном файле или файлах. Чтобы попробовать примеры, сначала создайте файл образца.
С помощью редактора, такого как nano или vim, скопируйте приведенный ниже текст в файл с именем мой файл.
xyzxyzde
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 команда включает:
- -я нахожу все строки независимо случая
- -c считать сколько строк содержит текст
- -n строка дисплея числа совпадающих строк
- -l только дисплей файл имена тот матч
- -р рекурсивный поиск подкаталогов
- -v найти все строки НЕТ содержащий текст
Например:
$ 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
- Сначала посчитайте, сколько строк в файле / etc / passwd.
- Теперь найдите все вхождения текста вар в файле / etc / passwd.
- Найдите, сколько строк в файле содержит текст
- Найдите, сколько строк НЕ содержат текст вар.
- Найдите запись для вашего логина в / 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 команда может быть записана в несколько строк. Однако это также можно сделать с помощью следующих специальных символов:
| | Чередование того или другого |
(…) | Логическая группировка части выражения |
При этом из файла извлекаются строки, начинающиеся с 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
- Показать файл люди и изучить его содержимое.
- Найдите все строки, содержащие строку Смит в файле люди.Подсказка: используйте команду grep, но помните, что по умолчанию она чувствительна к регистру.
- Создайте новый файл npeople, содержащий все строки, начинающиеся со строки Личное в файле людей.Подсказка: используйте команду grep с>.
- Подтвердите содержимое файла npeople, указав файл.
- Теперь добавьте все строки, где текст заканчивается строкой 500 в файле люди в файл npeople.Подсказка: используйте команду grep с >>.
- Снова подтвердите содержимое файла npeople, указав файл.
- Найдите IP-адрес сервера, который хранится в файле / etc / hosts.Подсказка: используйте команду grep с $ (имя хоста)
- Использовать 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
- Найдите все строки, содержащие имена Эванс или же Maler в файле люди.
- Найдите все строки, содержащие имена Смит, Смит или же Смайт в файле люди.
- Найдите все строки, содержащие имена Браун, Брауэн или же Брон в файле люди.Если у вас есть время:
- Найдите строку, содержащую строку (админ), включая скобки, в файле люди.
- Найдите в файле people строку, содержащую символ *.
- Объедините 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 -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 '\ *' люди
Объедините 5 и 6 выше, чтобы найти оба выражения.