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