Коришћење греп (и егреп) са регуларним изразима

Using Grep With Regular Expressions



Овај водич описује како користити обоје дршкаегреп) т о пронаћи текст у датотекама, у њиховом једноставном облику и у комбинацији са регуларним изразима. Садржи неколико примери и вежбе , више решења , како би гледалац завршио.

Име дршка долази из наредбе ед (и вим) г/ре/п, што значи глобално тражење датог регуларног израза и штампање (приказ) резултата.







Редовно Изрази

Услужни програми омогућавају кориснику да тражи текстуалне датотеке за редове који одговарају регуларном изразу ( регекп ). Регуларни израз је низ за претрагу састављен од текста и једног или више од 11 посебних знакова. Једноставан пример је подударање почетка линије.



Пример датотеке

Основни облик дршка могу се користити за проналажење једноставног текста унутар одређене датотеке или датотека. Да бисте испробали примере, прво креирајте датотеку узорка.



Користите уређивач, попут нано или вим, да копирате доњи текст у датотеку под називом мифиле .





киз
кизде
екизд
декиз
д? гкиз
ккз
кзз
к з
к*з
кз
к з
КСИЗ
КСИИЗ
кИз
кииз
киииз
кииииз

Иако можете копирати и залепити примере у текст (имајте на уму да се двоструки наводници можда не копирају правилно), команде морају бити откуцане да би се правилно научиле.

Пре него што испробате примере, погледајте огледну датотеку:



$мачкамифиле

Једноставно претраживање

Да бисте пронашли текст „киз“ унутар датотеке, покрените следеће:

$дршкакиз мифиле

Коришћење боја

За приказ боја користите –цолор (двострука цртица) или једноставно креирајте псеудоним. На пример:

$дршка --бојакиз мифиле

или

$алиас дршка= 'дршка--боја '
$дршкакиз мифиле

Опције

Уобичајене опције које се користе са дршка команде укључују:

  • -налазим све линије неовисно случаја
  • цоунт колико редова садржи текст
  • -н ​​линија приказа бројеви одговарајућих линија
  • -само на екрану филе имена та утакмица
  • рекурзивна претраживање поддиректоријума
  • -в пронаћи све линије НЕ који садржи текст

На пример:

$дршка киз мифиле# пронаћи текст без обзира на величину слова

$дршка -ицкиз мифиле# број редова са текстом

$дршка -инкиз мифиле# приказују бројеве линија

Креирајте више датотека

Пре него што покушате да претражите више датотека, прво направите неколико нових датотека:

$Избациокиз>мифиле1
$Избацио киз нкзз нКСИЗ>мифиле2
$Избацио ккк ниии>мифиле3
$мачкамифиле1
$мачкамифиле2
$мачкамифиле3

Претражите више датотека

За претраживање више датотека помоћу назива датотека или замјенског знака унесите:

$дршка -ицкиз мифиле мифиле1 мифиле2 мифиле3
$дршка -инкиз ми*
# подударање назива датотека које почињу са „моје“

Вежба И.

  1. Прво избројите колико редова постоји у датотеци /етц /пассвд.
Савет: користитеТоалет -тхе /итд/пассвд
  1. Сада пронађите све појаве текста где у датотеци /етц /пассвд .
  2. Сазнајте колико редова у датотеци садржи текст
  3. Сазнајте колико редова НЕ садржи текст где .
  4. Пронађите унос за пријаву у /етц/пассвд

Решења за вежбе можете пронаћи на крају овог чланка.

Коришћење регуларних израза

Команда дршка могу се користити и са регуларним изразима коришћењем једног или више од једанаест посебних знакова или симбола за прецизирање претраживања. Регуларни израз је низ знакова који укључује посебне знакове који омогућавају подударање узорака унутар помоћних програма, као што је дршка , Дошао сам и сед . Имајте на уму да ће низове можда бити потребно ставити у наводнике.

Доступни посебни знакови укључују:

^ Почетак линије
$ Крај реда
. Било који знак (осим н новог реда)
* 0 или више претходних израза
Претходни симбол чини га дословним карактером

Имајте на уму да *, који се може користити у командној линији за подударање са било којим бројем знакова, укључујући ниједан, јесте не овде се користи на исти начин.

Такође обратите пажњу на употребу наводника у следећим примерима.

Примери

Да бисте пронашли све редове који почињу текстом помоћу знака ^:

$дршка‘^Ксиз’ моја датотека

Да бисте пронашли све редове који завршавају текстом користећи знак $:

$дршка‘Ксиз $’ мифиле

Да бисте пронашли редове који садрже низ помоћу знакова ^ и $:

$дршка‘^Ксиз $’ моја датотека

Да бисте пронашли линије користећи . да одговара било ком знаку:

$дршка‘^Кс.з’ моја датотека

Да бисте пронашли редове помоћу * који одговарају 0 или више претходног израза:

$дршка‘^Кси*з ’мифиле

Да бисте пронашли редове користећи.* За подударање 0 или више било ког знака:

$дршка‘^ Кс.*з ’мифиле

Да бисте пронашли линије користећи да бисте избегли знак *:

$дршка‘^ Кс *з ’мифиле

Да бисте пронашли знак, користите:

$дршка‘\’ моја датотека

Израз греп - егреп

Тхе дршка команда подржава само подскуп расположивих регуларних израза. Међутим, команда егреп:

  • омогућава пуну употребу свих регуларних израза
  • може истовремено тражити више од једног израза

Имајте на уму да изрази морају бити затворени у пар наводника.

Да бисте користили боје, користите –цолор или поново креирајте псеудоним:

$алиас егреп='егреп --цолор'

Да бисте тражили више од једног регек тхе егреп команда се може написати у више редова. Међутим, то се може урадити и помоћу ових посебних знакова:

| Алтернација, било једно или друго
(…) Логичко груписање дела израза
$егреп '(^роот |^ууцп |^маил)' /итд/пассвд

Ово издваја линије које почињу са роот, ууцп или маил из датотеке, | симбол значи било коју од опција.

Следећа команда ће не рад, иако се не приказује порука, пошто је основна дршка команда не подржава све регуларне изразе:

$дршка '(^роот |^ууцп |^маил)' /итд/пассвд

Међутим, на већини Линук система команда греп -Е је исто што и употреба егреп :

$дршка '(^роот |^ууцп |^маил)' /итд/пассвд

Коришћење филтера

Цевоводи је процес слања резултата једне наредбе као улаза у другу наредбу и један је од најмоћнијих доступних Линук алата.

Наредбе које се појављују у цевоводу често се називају филтерима, јер у многим случајевима просију или мењају улаз који им је прослеђен пре него што пошаљу измењени ток на стандардни излаз.

У следећем примеру, стандардни излаз из лс -л се преноси као стандардни улаз у дршка команда. Излаз из дршка наредба се затим преноси као улаз у више команда.

Ово ће приказати само директоријуме у /итд :

$лс -тхе /итд|дршка‘^Д’|више

Следеће команде су примери коришћења филтера:

$пс -еф|дршкацрон

$СЗО|дршкакдм

Пример датотеке

Да бисте испробали вежбу прегледа, прво направите следећу датотеку узорка.

Користите уређивач, попут нано или вим, да копирате доњи текст у датотеку под називом људи:

Персонал Ј.Смитх 25000
Персонал Е.Смитх 25400
Обука А.Бровн 27500
Обука Ц.Бровен 23400
(Админ) Р.Брон 30500
Гоодсоут Т.Смитх 30000
Лични Ф.Јонес 25000
обука* Ц.Еванс 25500
Гоодсоут В.Попе 30400
Приземље Т.Смитхе 30500
Особље Ј.Малер 33000

Вежба ИИ

  1. Прикажите датотеку људи и испитати његов садржај.
  2. Пронађите све редове који садрже низ Смитх у датотеци пеопле.Свет: користите команду греп, али запамтите да подразумевано разликује велика и мала слова.
  3. Направите нову датотеку, нпеопле, која садржи све редове који почињу низом Лични у датотеци људи. Савет: користите команду греп са>.
  4. Потврдите садржај датотеке нпеопле навођењем датотеке.
  5. Сада додајте све редове где се текст завршава низом 500 у датотеци људи у датотеку нпеопле.Савет: користите команду греп са >>.
  6. Поново потврдите садржај датотеке нпеопле навођењем датотеке.
  7. Пронађите ИП адресу сервера која је сачувана у датотеци /етц/хостс .Савет: користите команду греп са $ (име хоста)
  8. Употреба егреп за издвајање из /етц/пассвд линије рачуна налога које садрже лп или своје ИД корисник .

Решења за вежбе можете пронаћи на крају овог чланка.

Више регуларних израза

Регуларни израз се може сматрати џокерима на стероидима.

Постоји једанаест знакова са посебним значењем: почетна и завршна угласта заграда [], коса црта , карета ^, знак долара $, тачка или тачка., Окомита трака или симбол цеви |, знак питања?, звездица или звездица *, знак плус + и округла заграда за отварање и затварање {}. Ови посебни знакови се такође често називају метакарактери.

Ево целог скупа посебних знакова:

^ Почетак линије
$ Крај реда
. Било који знак (осим н новог реда)
* 0 или више претходних израза
| Алтернација, било једно или друго
[…] Експлицитан скуп знакова који се подударају
+ 1 или више претходних израза
? 0 или 1 претходног израза
Претходни симбол чини га дословним карактером
{…} Експлицитан запис квантификатора
(…) Логичко груписање дела израза

Подразумевана верзија дршка има само ограничену подршку за регуларне изразе. Да би сви следећи примери радили, користите егреп уместо или греп -Е .

Да бисте пронашли линије користећи | да одговара било ком изразу:

$егреп‘Кскз|кзз ’мифиле

Да бисте пронашли линије користећи | за подударање било ког израза унутар низа такође користите ():

$егреп‘^ Кс(Из|из)'Мифиле

Да бисте пронашли редове помоћу [] за подударање са било којим знаком:

$егреп‘^ Кс[Ии]з ’мифиле

Да бисте пронашли редове помоћу [] да НЕ одговарају ниједном знаку:

$егреп‘^ Кс[^ Ии]з ’мифиле

Да бисте пронашли редове помоћу * који одговарају 0 или више претходног израза:

$егреп‘^Кси*з ’мифиле

Да бисте пронашли редове користећи знак + који одговара 1 или више претходних израза:

$егреп‘^Кси+з’ моја датотека

Да бисте пронашли линије користећи? да одговара 0 или 1 претходног израза:

$егреп‘^Кси? З’ мифиле

Вежба ИИИ

  1. Пронађите све редове који садрже имена Еванс или сликар у датотеци људи.
  2. Пронађите све редове који садрже имена Смитх, Смитх или Смитхе у датотеци људи.
  3. Пронађите све редове који садрже имена Бровн, Бровен или Извор у датотеци људи. Ако имате времена:
  4. Пронађите ред који садржи низ (администратор), укључујући заграде, у датотеци људи.
  5. Пронађите ред који садржи знак * у датотеци људи.
  6. Комбинујте горње 5 и 6 да бисте пронашли оба израза.

Још примера

Да бисте пронашли линије помоћу . и * да одговара било ком скупу знакова:

$егреп‘^Кси.*з ’мифиле

Да бисте пронашли редове помоћу {} за подударање са Н бројем знакова:

$егреп‘^Кси{3}з ’мифиле
$егреп‘^Кси{4}з ’мифиле

Да бисте пронашли редове помоћу {} за подударање са Н или више пута:

$егреп‘^Кси{3,}з ’мифиле

Да бисте пронашли редове помоћу {} за подударање са Н пута, али не више од М пута:

$егреп‘^Кси{2,3}з ’мифиле

Закључак

У овом водичу смо прво погледали коришћење дршка у једноставном облику пронаћи текст у датотеци или у више датотека. Затим смо комбиновали текст за тражење једноставним регуларним изразима, а затим помоћу сложенијих егреп .

Следећи кораци

Надам се да ћете овде стечено знање добро искористити. Испробати дршка команде на вашим подацима и запамтите, регуларни изрази описани овде могу се користити у истом облику у ми , сед и авк !

Решења за вежбе

Вежба И.

Прво избројите колико редова има у датотеци /етц/пассвд .
$ wc -l /etc/passwd
Сада пронађите све појаве текста где у датотеци /етц /пассвд.
$ grep var /etc/passwd
Сазнајте колико редова у датотеци садржи текст где

дршка где/итд/пассвд

Сазнајте колико редова НЕ садржи текст где .

дршка -Си-Вигде/итд/пассвд

Пронађите унос за пријаву у /етц/пассвд филе
grep kdm /etc/passwd

Вежба ИИ

Прикажите датотеку људи и испитати његов садржај.
$ cat people
Пронађите све редове који садрже низ Смитх у датотеци људи .
$ grep 'Smith' people
Креирајте нову датотеку, нпеопле , који садржи све редове који почињу низом Лични у људи филе
$ grep '^Personal' people> npeople
Потврдите садржај датотеке нпеопле уврштавањем датотеке.
$ cat npeople
Сада додајте све редове где се текст завршава низом 500 у датотеци људи у датотеку нпеопле .
$ grep '500$' people>>npeople
Поново потврдите садржај датотеке нпеопле уврштавањем датотеке.
$ cat npeople
Пронађите ИП адресу сервера која је сачувана у датотеци /етц/хостс .
$ grep $(hostname) /etc/hosts
Употреба егреп за издвајање из /етц/пассвд линије рачуна налога које садрже лп или свој кориснички ИД.
$ egrep '(lp|kdm:)' /etc/passwd

Вежба ИИИ

Пронађите све редове који садрже имена Еванс или сликар у датотеци људи .
$ egrep 'Evans|Maler' people
Пронађите све редове који садрже имена Смитх , Смитх или Смитхе у датотеци људи .
$ egrep 'Sm(i|y)the?' people
Пронађите све редове који садрже имена Бровн , Бровен или Извор у датотеци људи.
$ egrep 'Brow?e?n' people
Пронађите ред који садржи низ (администратор), укључујући заграде, у датотеци људи .

$егреп ' (Администратор )'људи

Пронађите линију која садржи знак * у датотеци људи.
$ egrep '*' people
Комбинујте горње 5 и 6 да бисте пронашли оба израза.

$егреп ' (Админ ) | *'људи