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

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

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

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

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

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

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

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

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

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

alias grep='grep --colour=auto'

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

grep -i Average geek-1.log

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

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

grep -v Mem geek-1.log

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

  Како да отпремите Ксбок Цустом Гамерпиц

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

grep -q average geek-1.log
echo $?
grep -q wdzwdz geek-1.log
echo $?

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

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

grep -r -i memfree .

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

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

ls -l logs-folder

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

grep -R -i memfree .

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

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

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

grep -i free geek-1.log

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

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

grep -w -i free geek-1.log
echo $?

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

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

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

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

grep -E -w -i "average|memfree" geek-1.log

греп -Е -в -и

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

Излаз из греп -Е -в -и

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

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

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

Тачно одговарајуће линије

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

grep -x "20-Jan--06 15:24:35" geek-1.log

греп -к

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

  Како уклонити замућење слике на иПхоне-у

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

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

sudo grep -v "https://www.wdzwdz.com/496056/how-to-use-the-grep-command-on-linux/#" /etc/sudoers

судо греп -в

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

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

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

grep -o MemFree geek-1.log

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

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

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

grep -c average geek-1.log

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

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

grep -n Jan geek-1.log

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

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

grep -m5 -n Jan geek-1.log

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

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

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

grep -A 3 -x "20-Jan-06 15:24:35" geek-1.log

греп -А 3 -к

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

grep -B 3 -x "20-Jan-06 15:24:35" geek-1.log

греп -Б 3 -к

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

grep -C 3 -x "20-Jan-06 15:24:35" geek-1.log

греп -Ц 3 -к

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

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

grep -l "sl.h" *.c

греп -л

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

  Како омогућити камеру на Омегле-у

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

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

grep -L "sl.h" *.c

греп -Л

Почетак и крај редова

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

grep "^ " geek-1.log

греп

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

Излаз греп

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

grep "00$" geek-1.log

греп

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

излаз греп

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

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

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

grep "ExtractParameters" *.c | less

греп

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

Излаз из греп

Ово вам омогућава да прелистате листу датотека и да користите мање могућности претраживања.

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

grep "ExtractParameters" *.c | wc -l

греп

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

ls -l | grep "Aug" | sort +4n

лс -л |  греп

Хајде да то разложимо:

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

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

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

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

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