Како се користи греп наредба на Линуку

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

Прича иза грепа

Тхе греп наредба је позната у Линук и Уник круговима из три разлога. Прво, изузетно је корисно. Друго, богатство опција може бити огромно. Треће, написано је преко ноћи како би се задовољила одређена потреба. Прва два се ударају; трећи је мало искључен.

Кен Тхомпсон је извукао могућности претраживања регуларних израза из изд едитор (изговара се ее-дее) и створио је мали програм - за сопствену употребу - за претраживање текстуалних датотека. Његов шеф одељења у лабораторији Белл, Доуг Мцилрои, пришао је Тхомпсону и описао проблем са којим се суочавао један од његових колега Лее МцМахон.

МцМахон је покушавао да идентификује ауторе федералистичких радова кроз текстуалну анализу. Био му је потребан алат који може да претражује фразе и низове у текстуалним датотекама. Томпсон је провео око сат времена те вечери правећи свој алат од општег програма који би могли користити други и преименовао га у греп. Име је узео из изд наредбени низ г / ре / п , што се преводи као „глобална претрага регуларних израза“.

Можете гледати Тхомпсона како разговара са Брианом Кернигханом о рођењу греп.

Једноставне претраге са греп

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

Приказују се одговарајуће линије. У овом случају то је један ред. Текст који се подудара је истакнут. То је зато што на већини дистрибуција греп је алиас:

алиас греп = "греп --цолоур = ауто"

Погледајмо резултате где постоји више линија које се подударају. Тражићемо реч „Просек“ у датотеци евиденције апликације. Будући да се не можемо сетити да ли је реч у малим записима у датотеци евиденције, користићемо опција (занемари велика слова):

греп -и Просечан геек-1.лог

Приказаће се свака одговарајућа линија, са одговарајућим текстом истакнутим у свакој.

Линије које се не подударају можемо приказати помоћу опције -в (обрнуто подударање).

греп -в Мем геек-1.лог

Нема истицања, јер су то линије које се не подударају.

Можемо проузроковати греп да потпуно ћути. Резултат се преноси љусци као повратна вредност из греп. Резултат нуле значи низ био пронађен, а резултат једног значи није нашао. Повратак код можемо проверити помоћу $? посебни параметри:

греп -к просечан геек-1.лог
ецхо $?
греп -к ховтогеек геек-1.лог
ецхо $?

Рекурзивне претраге са греп

Да бисте претраживали угнежђене директоријуме и поддиректоријуме, користите опцију -р (рекурзивна). Имајте на уму да у командној линији не наведете име датотеке, морате да наведете путању. Овде тражимо у тренутном директоријуму „.“ и било који поддиректоријум:

греп -р -и мемфрее.

Излаз укључује директоријум и име датотеке сваке одговарајуће линије.

Можемо направитигреп следите симболичне везе користећи опција (рекурзивно преусмеравање). У овом директоријуму имамо симболичку везу која се зове логс-фолдер. Указује на / хоме / даве / логс.

лс -л фасцикла дневника

Поновимо нашу последњу претрагу са опција (рекурзивно преусмеравање):

греп -Р -и мемфрее.

Прати се симболична веза и претражује се директоријум на који упућује греп такође.

Тражење целих речи

Подразумевано, греп подудараће се са линијом ако се циљ претраживања појави било где у тој линији, укључујући унутар другог низа. Погледајте овај пример. Тражићемо реч „бесплатно“.

греп -и фрее геек-1.лог

Резултати су редови у којима је низ „слободан“, али то нису засебне речи. Они су део низа „МемФрее“.

Присилити греп да бисте се подударали само са одвојеним „речима“, користите опција (ворд регекп).

греп -в -и фрее геек-1.лог
ецхо $?

Овог пута нема резултата, јер се појам за претрагу „бесплатно“ не појављује у датотеци као посебна реч.

Коришћење више термина за претрагу

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

Ова команда претражује два појма за претрагу, „просек“ и „мемфрее“.

греп -Е -в -и "просек | мемфрее" геек-1.лог

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

Такође можете тражити више термина који нису нужно целе речи, али могу бити и целе речи.

Тхе Опција (паттерн) вам омогућава да користите више термина за претрагу у командној линији. Користимо функцију заграде регуларног израза да бисмо креирали образац претраживања. То говори греп како би се подударао са било којим од знакова садржаних у заградама „[].“ Ово значи греп ће се подударати са „кБ“ или „КБ“ док претражује.

Оба низа се подударају, а у ствари неке линије садрже оба низа.

Тачно подударање линија

Тхе-Икс (лине регекп) поклапаће се само са линијама на којима је цела линија подудара се са појмом за претрагу. Потражимо печат датума и времена за који знамо да се појављује само једном у датотеци евиденције:

греп -к "20. јануара - 06. 15:24:35" геек-1.лог

Пронађена је и приказана појединачна линија која се подудара.

Супротно од тога је само показивање линија које немојте меч. Ово може бити корисно када гледате конфигурационе датотеке. Коментари су сјајни, али понекад је тешко међу њима препознати стварна подешавања. Ево / етц / судоерс датотека:

Можемо ефикасно филтрирати редове коментара попут овог:

судо греп -в "#" / етц / судоерс

То је много лакше рашчланити.

Приказује се само одговарајући текст

Можда постоји прилика када не желите да видите целу одговарајућу линију, већ само одговарајући текст. Тхе Опција (само подударање) чини управо то.

греп -о МемФрее геек-1.лог

Екран се своди на приказивање само текста који се подудара са појмом за претрагу, уместо целе линије за подударање.

Бројање са грепом

греп није само текст, он може да пружи и нумеричке информације. Можемо направити греп рачунајте за нас на различите начине. Ако желимо да знамо колико се пута појам за претрагу појављује у датотеци, можемо да користимо опција (цоунт).

греп -ц просечан геек-1.лог

греп извештава да се појам за претрагу у овој датотеци појављује 240 пута.

Можете направити греп прикажите број линије за сваку одговарајућу линију помоћу опција (број линије).

греп -н Јан геек-1.лог

Број линије за сваку одговарајућу линију приказује се на почетку реда.

Да бисте смањили број приказаних резултата, користите опција (максималан број). Излаз ћемо ограничити на пет одговарајућих линија:

греп -м5 -н Јан геек-1.лог

Додавање контекста

Често је корисно видети неке додатне линије - могуће линије које се не подударају - за сваку одговарајућу линију. може вам помоћи да разликујете које су од подударних линија оне које вас занимају.

Да бисте приказали неке редове након одговарајуће линије, користите опцију -А (после контекста). У овом примеру тражимо три реда:

греп -А 3 -к "20-Јан-06 15:24:35" геек-1.лог

Да бисте видели неке редове пре одговарајуће линије, користите (контекст пре) опција.

греп -Б 3 -к "20-Јан-06 15:24:35" геек-1.лог

А да бисте укључили редове пре и после одговарајуће линије, користите (контекст) опција.

греп -Ц 3 -к "20-Јан-06 15:24:35" геек-1.лог

Приказују се одговарајуће датотеке

Да бисте видели имена датотека које садрже термин за претрагу, користите (датотеке са подударањем). Да бисте сазнали које датотеке изворног кода Ц садрже референце на сл.х датотеку заглавља, користите ову наредбу:

греп -л "сл.х" * .ц

Наведена су имена датотека, а не одговарајуће линије.

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

греп -Л "сл.х" * .ц

Почетак и крај линија

Можемо да форсирамо греп да прикаже само подударања која су или на почетку или на крају реда. Оператор регуларног израза „^“ подудара се с почетком реда. Практично све линије унутар датотеке дневника садржаће размаке, али тражићемо редове којима је размак као први знак:

греп "^" геек-1.лог

Приказују се редови који имају размак као први знак - на почетку реда.

Да бисте се подударали са крајем реда, користите оператор регуларног израза „$“. Тражићемо редове који се завршавају са „00“.

греп "00 $" геек-1.лог

На екрану се приказују линије којима су последњи знакови „00“.

Коришћење цеви са греп

Наравно, можете унети улаз на греп , усмери излаз из греп у други програм и имају греп угнежђена усред ланца цеви.

Рецимо да желимо да видимо све појаве низа „ЕктрацтПараметерс“ у нашим Ц датотекама изворног кода. Знамо да ће их бити поприлично, па уводимо излаз у мање:

греп "ЕктрацтПараметерс" * .ц | мање

Резултат је представљен у мање.

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

Ако изводимо излаз из греп у Тоалет и користите Опција (линије), можемо да избројимо број редова у датотекама изворног кода које садрже „ЕктрацтПараметерс“. (То бисмо могли постићи помоћу греп опција (цоунт), али ово је сјајан начин да се демонстрира извођење цевовода греп.)

греп "ЕктрацтПараметерс" * .ц | вц -л

Следећом командом уводимо излаз из лс у греп и цевоводи излаз из греп у врста . Датотеке наводимо у тренутном директоријуму, бирамо оне са низом „Ауг“ и сортирамо их према величини датотеке:

лс -л | греп "август" | сортирај + 4н

Раздвојимо то:

  • лс -л: Извршите списак датотека у дужем формату помоћу лс.
  • греп „август“: Изаберите линије из лс списак који у себи има „авг“. Имајте на уму да би се такође пронашле датотеке у којима је име „Ауг“.
  • сортирај + 4н: Сортирајте излаз из греп-а у четвртој колони (величина датотеке).

Добијамо сортирани списак свих датотека измењених у августу (без обзира на годину), растућим редоследом величине датотеке.

ПОВЕЗАН:Како се користе цеви на Линуку

греп: Мање команда, више савезник

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

Квачило греп са неким регуларним изразима-фу заиста подиже на виши ниво.

ПОВЕЗАН:Како се користе основни регуларни изрази за бољу претрагу и уштеду времена


$config[zx-auto] not found$config[zx-overlay] not found