Имя рукоятка поступает из команды ed (и vim) g / re / p, что означает глобальный поиск данного регулярного выражения и печать (отображение) вывода.
Обычный Выражения
Утилиты позволяют пользователю искать в текстовых файлах строки, соответствующие регулярному выражению ( регулярное выражение ). Регулярное выражение - это строка поиска, состоящая из текста и одного или нескольких специальных символов из 11. Простой пример - сопоставление начала строки.
Образец файла
Основная форма рукоятка может использоваться для поиска простого текста в определенном файле или файлах. Чтобы попробовать примеры, сначала создайте файл образца.
С помощью редактора, такого как nano или vim, скопируйте приведенный ниже текст в файл с именем мой файл .
xyz
xyzde
exyzd
dexyz
d? gxyz
xxz
xzz
х г
х * г
xz
х г
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz
Хотя вы можете копировать и вставлять примеры в текст (обратите внимание, что двойные кавычки могут не копироваться должным образом), команды необходимо вводить, чтобы правильно их изучать.
Прежде чем пробовать примеры, просмотрите образец файла:
$Котмой файл
Простой поиск
Чтобы найти текст «xyz» в файле, выполните следующее:
$рукояткаxyz myfileИспользование цветов
Для отображения цветов используйте –color (двойной дефис) или просто создайте псевдоним. Например:
$рукоятка --цветxyz myfileили
$псевдоним рукоятказнак равнорукоятка--цвет'$рукояткаxyz myfile
Параметры
Общие параметры, используемые с рукоятка команда включает:
- -я найду все строки независимо дела
- -c считать сколько строк содержит текст
- -n строка отображения числа совпадающих строк
- -l только отображение файл имена тот матч
- -р рекурсивный поиск подкаталогов
- -v найти все строки НЕТ содержащий текст
Например:
$рукоятка -яxyz myfile# найти текст независимо от регистра$рукоятка -ICxyz myfile# подсчитываем строки с текстом
$рукоятка -вxyz myfile# показать номера строк
Создать несколько файлов
Прежде чем пытаться искать несколько файлов, сначала создайте несколько новых файлов:
$выбросилxyz>myfile1$выбросил -А такжеxyz nxzz nXYZ>myfile2
$выбросил -А такжеххх нггг>myfile3
$Котmyfile1
$Котmyfile2
$Котmyfile3
Искать в нескольких файлах
Для поиска в нескольких файлах с использованием имен файлов или подстановочного знака введите:
$рукоятка -ICxyz myfile myfile1 myfile2 myfile3$рукоятка -вxyz мой*
# совпадение с именами файлов, начинающимися с 'my'
Упражнение I
- Сначала посчитайте, сколько строк в файле / etc / passwd.
- Теперь найдите все вхождения текста куда в файле / etc / passwd .
- Найдите, сколько строк в файле содержит текст
- Найдите, сколько строк НЕ содержат текст куда .
- Найдите запись для вашего логина в / etc / passwd
Решения для упражнений можно найти в конце этой статьи.
Использование регулярных выражений
Команда рукоятка также может использоваться с регулярными выражениями, используя один или несколько из одиннадцати специальных символов или символов для уточнения поиска. Регулярное выражение - это символьная строка, которая включает специальные символы, позволяющие сопоставить шаблон в таких утилитах, как рукоятка , я пришел а также sed . Обратите внимание, что строки, возможно, необходимо заключить в кавычки.
Доступные специальные символы:
^ | Начало строки |
$ | Конец строки |
. | Любой символ (кроме n новой строки) |
* | 0 или более предыдущего выражения |
Предшествующий символу делает его буквальным символом |
Обратите внимание, что *, который может использоваться в командной строке для соответствия любому количеству символов, включая ни одного, является нет здесь используется точно так же.
Также обратите внимание на использование кавычек в следующих примерах.
Примеры
Чтобы найти все строки, начинающиеся с текста, используя символ ^:
$рукоятка‘^ Xyz’ myfileЧтобы найти все строки, заканчивающиеся текстом с помощью символа $:
$рукоятка‘Xyz $’ myfileЧтобы найти строки, содержащие строку с использованием символов ^ и $:
$рукоятка‘^ Xyz $’ myfileЧтобы найти линии с помощью . для соответствия любому персонажу:
$рукоятка‘^ X.z’ myfileЧтобы найти строки, использующие * для соответствия 0 или более из предыдущего выражения:
$рукоятка‘^ Xy*z ’myfileЧтобы найти строки, использующие. * Для соответствия 0 или более любых символов:
$рукоятка‘^ X.*z ’myfileЧтобы найти линии с помощью чтобы избежать символа *:
$рукоятка‘^ X *z ’myfileЧтобы найти символ , используйте:
$рукоятка'\' мой файлВыражение grep - egrep
В рукоятка команда поддерживает только подмножество доступных регулярных выражений. Однако команда egrep:
- позволяет в полной мере использовать все регулярные выражения
- может одновременно искать более одного выражения
Обратите внимание, что выражения должны быть заключены в пару кавычек.
Чтобы использовать цвета, используйте –color или снова создайте псевдоним:
$псевдоним egrepзнак равно'egrep --color'Чтобы найти более одного регулярное выражение то egrep Команда может быть записана в несколько строк. Однако это также можно сделать с помощью следующих специальных символов:
| | Чередование того или другого |
(…) | Логическая группировка части выражения |
При этом из файла извлекаются строки, начинающиеся с root, uucp или mail, | символ, обозначающий любой из вариантов.
Следующая команда будет нет работают, хотя сообщение не отображается, так как основная рукоятка команда не поддерживает все регулярные выражения:
$рукоятка '(^ корень | ^ uucp | ^ mail)' /так далее/парольОднако в большинстве систем Linux команда grep -E то же самое, что и использование egrep :
$рукоятка -А ТАКЖЕ '(^ корень | ^ uucp | ^ mail)' /так далее/парольИспользование фильтров
Трубопровод представляет собой процесс отправки выходных данных одной команды в качестве входных данных в другую команду и является одним из самых мощных доступных инструментов Linux.
Команды, которые появляются в конвейере, часто называют фильтрами, поскольку во многих случаях они просеивают или изменяют переданный им ввод перед отправкой измененного потока на стандартный вывод.
В следующем примере стандартный вывод из ls -l передается как стандартный ввод в рукоятка команда. Выход из рукоятка затем передается в качестве входных данных в более команда.
Это отобразит только каталоги в /так далее :
$ls - /так далее|рукоятка‘^ D’|болееСледующие команды являются примерами использования фильтров:
$пс -ef|рукояткаcron $кто|рукояткаkdmОбразец файла
Чтобы попробовать это упражнение, сначала создайте следующий образец файла.
С помощью редактора, такого как nano или vim, скопируйте приведенный ниже текст в файл с именем люди:
Личный Дж. Смит 25000Персональный E.Smith 25400
Тренинг A.Brown 27500
Тренинг C.Browen 23400
(Админ) R.Bron 30500
Гудсоут Т.Смит 30000
Личный Ф.Джонс 25000
обучение * C.Evans 25500
Гудсоут W.Pope 30400
Первый этаж Т.Смайт 30500
Персонал J.Maler 33000
Упражнение II.
- Показать файл люди и изучите его содержимое.
- Найдите все строки, содержащие строку Смит в файле people.Hint: используйте команду grep, но помните, что по умолчанию она чувствительна к регистру.
- Создайте новый файл npeople, содержащий все строки, начинающиеся со строки Личное в файле людей. Совет: используйте команду grep с>.
- Подтвердите содержимое файла npeople, указав файл.
- Теперь добавьте все строки, где текст заканчивается строкой 500 в файле people к файлу npeople. Подсказка: используйте команду grep с >>.
- Снова подтвердите содержимое файла npeople, указав файл.
- Найдите IP-адрес сервера, который хранится в файле / etc / hosts Подсказка: используйте команду grep с $ (hostname)
- Использовать egrep извлечь из / etc / passwd строки учетной записи файла, содержащие lp или ваш собственный ID пользователя .
Решения для упражнений можно найти в конце этой статьи.
Больше регулярных выражений
Регулярное выражение можно рассматривать как подстановочные знаки на стероидах.
Есть одиннадцать символов со специальными значениями: открывающая и закрывающая квадратные скобки [], обратная косая черта , каретка ^, знак доллара $, точка или точка., Вертикальная черта или вертикальная черта |, вопросительный знак?, звездочка или звездочка *, знак плюса + и открывающая и закрывающая круглые скобки {}. Эти специальные символы также часто называют метасимволами.
Вот полный набор специальных символов:
^ | Начало строки |
$ | Конец строки |
. | Любой символ (кроме n новой строки) |
* | 0 или более предыдущего выражения |
| | Чередование того или другого |
[…] | Явный набор символов для соответствия |
+ | 1 или более из предыдущего выражения |
? | 0 или 1 предыдущего выражения |
Предшествующий символу делает его буквальным символом | |
{…} | Явная нотация кванторов |
(…) | Логическая группировка части выражения |
Версия по умолчанию рукоятка имеет только ограниченную поддержку регулярных выражений. Чтобы все следующие примеры работали, используйте egrep вместо этого или grep -E .
Чтобы найти линии с помощью | чтобы соответствовать любому выражению:
$egrep‘Xxz|xzz ’myfileЧтобы найти строки, используя | чтобы соответствовать любому выражению в строке, также используйте ():
$egrep‘^ X(Yz|yz)' мой файлЧтобы найти строки с помощью [], соответствующие любому символу:
$egrep‘^ X[Yy]z ’myfileЧтобы найти строки с помощью [], НЕ совпадающие ни с одним символом:
$egrep‘^ X[^ Yy]z ’myfileЧтобы найти строки, использующие * для соответствия 0 или более из предыдущего выражения:
$egrep‘^ Xy*z ’myfileЧтобы найти строки с помощью +, соответствующие одному или нескольким предыдущим выражениям:
$egrep‘^ Xy + z’ мой файлЧтобы найти строки с помощью? чтобы соответствовать 0 или 1 в предыдущем выражении:
$egrep‘^ Xy? Z’ myfileУпражнение III.
- Найдите все строки, содержащие имена Эванс или художник в файле люди.
- Найдите все строки, содержащие имена Смит, Смит или Смайт в файле люди.
- Найдите все строки, содержащие имена Браун, Брауэн или Источник в файле люди.Если успеешь:
- Найдите строку, содержащую строку (админ), включая скобки, в файле люди.
- Найдите в файле people строку, содержащую символ *.
- Объедините 5 и 6 выше, чтобы найти оба выражения.
Больше примеров
Чтобы найти строки, используя . и * для соответствия любому набору символов:
$egrep‘^ Xy.*z ’myfileЧтобы найти строки с помощью {} для соответствия количеству N символов:
$egrep‘^ Xy{3}z ’myfile$egrep‘^ Xy{4}z ’myfile
Чтобы найти строки с помощью {}, соответствующие N или более раз:
$egrep‘^ Xy{3,}z ’myfileЧтобы найти строки с помощью {} для совпадения N раз, но не более M раз:
$egrep‘^ Xy{2,3}z ’myfileЗаключение
В этом уроке мы впервые рассмотрели использование рукоятка в простой форме для поиска текста в файле или в нескольких файлах. Затем мы объединили искомый текст с простыми регулярными выражениями, а затем с более сложными, используя egrep .
Следующие шаги
Я надеюсь, что вы примените полученные здесь знания с пользой. Проверять рукоятка команды над вашими данными и помните, что описанные здесь регулярные выражения могут использоваться в той же форме в мы , sed а также awk !
Решения для упражнений
Упражнение I
Сначала посчитайте, сколько строк в файле / etc / passwd .
$ wc -l /etc/passwd
Теперь найдите все вхождения текста куда в файле / etc / passwd.
$ grep var /etc/passwd
Найдите, сколько строк в файле содержит текст куда
Найдите, сколько строк НЕ содержат текст куда .
рукоятка -резюмекуда/так далее/парольНайдите запись для вашего логина в / etc / passwd файл
grep kdm /etc/passwd
Упражнение II.
Показать файл люди и изучите его содержимое.
$ cat people
Найдите все строки, содержащие строку Смит в файле люди .
$ grep 'Smith' people
Создайте новый файл, люди , содержащий все строки, начинающиеся со строки Личное в люди файл
$ grep '^Personal' people> npeople
Подтвердите содержимое файла люди перечислив файл.
$ cat npeople
Теперь добавьте все строки, где текст заканчивается строкой 500 в файле люди в файл люди .
$ grep '500$' people>>npeople
Снова подтверждаем содержимое файла люди перечислив файл.
$ cat npeople
Найдите IP-адрес сервера, который хранится в файле / etc / hosts .
$ grep $(hostname) /etc/hosts
Использовать egrep извлечь из / etc / passwd строки учетной записи файла, содержащие lp или ваш собственный идентификатор пользователя.
$ egrep '(lp|kdm:)' /etc/passwd
Упражнение III.
Найдите все строки, содержащие имена Эванс или художник в файле люди .
$ egrep 'Evans|Maler' people
Найдите все строки, содержащие имена Смит , Смит или Смайт в файле люди .
$ egrep 'Sm(i|y)the?' people
Найдите все строки, содержащие имена коричневый , Browen или Источник в файле люди.
$ egrep 'Brow?e?n' people
Найдите строку, содержащую строку (админ), включая скобки, в файле люди .
Найдите строку, содержащую символ * в файле люди.
$ egrep '*' people
Объедините 5 и 6 выше, чтобы найти оба выражения.