греп то је један од најчешће коришћених алата на ГНУ / Линук командној линији. Упркос томе што је врло једноставан алат, омогућава вам извођење великог броја операција. Користи се посебно у комбинацији са цевима, да би се пронашле одређене тачке у излазу претходне команде итд. Али постоји и алат познат као егреп који је еквивалентан покретању греп-а са опцијом -Е.
Е долази из „Проширеног регуларног израза“, што је оно што активира опцију -Е и оно што подразумевано имате у егрепу без употребе те опције. Односно, можете да користите проширени регуларни изрази. У овом упутству нећу улазити у објашњавање шта су регуларни изрази, како се могу користити и који су типови у * ник-у. Показаћу само практичне примере неких корисних ствари које можете учинити са егрепом ...
греп, егреп и фгреп су слични. У ствари, егреп је еквивалентан греп -Е, а фгреп је еквивалентан греп -Ф. Односно, у случају који се тиче нас, такође ће тумачити обрасце као регуларне изразе.
Ви потражите ред или реч у једној или више датотека, као што је случај и са греп. На пример, претпоставимо да желите да тражите реч убунту у датотеци која се зове снап.ткт, а такође и у свим .ткт датотекама у тренутном директоријуму:
egrep ubuntu snap.txt
egrep ubuntu *.txt
Претраживање такође може бити рекурзивно Да бисте претражили целокупан садржај тренутног директоријума:
egrep -r "hola mundo" *
До сада су се претраживале тачне речи или низови, то јест узимајући у обзир велика и мала слова (осетљиво на велика и мала слова), али ако то желите да урадите у режиму без великих и малих слова, без обзира да ли су велика или мала, можете користити следеће (ако додате в проналази само потпуна подударања):
egrep -i "ejemplo" documento.txt
egrep -iw "ejemplo" documento.txt
Покажите, не случајности, али имена датотека у којима су та подударања пронађена:
egrep -l hola *.txt
Прикажите само образац или реч претражен у документу:
egrep -o printf hola.c
Запамтите да можете да искористите све могућности које можете да замислите. Можете комбиновати неколико претходно виђених опција или их можете допунити другим опцијама као што су -А н и -Б н, где н број линија које желите да прикажете пре (Пре) и после (После) меча или обоје истовремено (Ц), тако да можете видети шта окружује меч:
egrep -A 2 "printf" hola.c
egrep -B 2 "printf" hola.c
egrep -C 2 printf hola.c
Потисните редове који садрже подударање и приказују само оне који се не подударају:
egrep -v "dos" números.doc
Или ако желите, можете користити више речи или подударања са -е. На пример:
egrep -v -e "uno" -e "dos" -e "tres" números.txt
Ако користиш -ц може да броји само број утакмица, или га обрните са -в да бисте приказали број неусклађених линија. На пример:
egrep -c "include" main.c
egrep -v -c "include" main.c
И чак прикажи број линије где се одиграо меч, а такође и позиција коју заузима:
egrep -n "void" hola.c
egrep -o -b "printf" hola.c
И заједно са регуларни изрази његове могућности се могу проширити. На пример, пронађите линију која започиње са Хелло и завршава са бие, или која почиње са Хелло након чега следи било шта, а затим се појављује матцх бие:
* Исправка следеће наредбе: захваљујући коментару читаоца Мануела Алцоцера успео сам да изменим следећу наредбу, јер је дошло до грешке.
egrep '^Hola.*adiós$' ejemplo.txt
egrep "Hola.*adiós" ejemplo.txt
Али ако се питате о разлици са греп-ом, ево примера који ће вам то јасно објаснити ... У случају употребе греп-а без -Е, требало би да користите секвенце бекства тако да тумачи посебне знакове као такве, у супротном би тумачио образац као такав не узимајући их у обзир. С друге стране, са егреп или греп -Е ће их узети у обзир. На пример:
grep '^no\(fork\|group\)' /etc/group
То би било еквивалентно:
grep -E '^no(fork|group)' /etc/group
egrep '^no(fork|group)' /etc/group
Односно, тражио би одговарајуће линије које почињу са нофорк или ногроуп. Али ако сте користили грепов први израз без секвенци екрана, оно што би урадило је претрага конкретни образац не (виљушка | група):
grep 'no(fork|group)' /etc/group
Такође можете претраживати алфанумерички распони, или одређене вредности, као што су лоцирање одређених ИП адреса:
cat /etc/networks | egrep "192.168.1.[5-9]"
cat /etc/networks | egrep "192.168.[1-3].[5-9]"
cat /etc/networks | egrep "192.168.1.[0-3]|[5-9]"
egrep 192.168.4.[10,40] networks
Ако желите, можете да користите друге регуларне изразе за прецизније претраге. На пример | да се нађе случајност или друго:
egrep -i '^(printf|scanf)' hola.c
Можете чак и лоцирати велико, мало, само абецедни знакови или алфанумерички итд., користећи друге изразе као што су: [: алнум:], [: алфа:], [: цифра:], [: нижа:], [: испис:], [: пункт:], [: размак:], [ : горњи:] итд. На пример, за претрагу великих слова:
egrep [[:upper:]] diccioario
Надам се да ће вам помоћи ... Ускоро ћу објаснити регуларне изразе у чланку посвећеном њему ...
Добар дан.
Неколико напомена ...
Објаснили сте команду 'егреп', али не стављајте разлику између 'егреп' и 'греп', што би требало да буде оно што је овде.
На пример:
Са греп: ип -4 а | греп '[0-9] \ +'
Са егрепом: ип -4 а | егреп '[0-9] +'
Ах, а ово је погрешно, 'егреп "Здраво. * Ћао" екампле.ткт'; овде се успех дешава када у датотеци постоји ред који садржи низ „Здраво“, праћен било чиме и праћен „збогом“, ред заиста може започети и завршити било чиме.
Ово би било оно што чланак каже:
егреп '^ Здраво. * бие $' екампле.ткт
И све опције, или скоро све (не престајем да то проверим), су опције 'греп', а не искључиво 'егреп'.
Срдачан поздрав.
Хвала што сте пријавили ту грешку. Оно што коментаришете регуларне изразе, већ сам ставио у други пасус. Посветићу им конкретан чланак, јер их има много и овај чланак би трајао предуго. Поздрав!
Поздрав поново, Исаац.
У другом пасусу ви у основи кажете, или сте требали рећи, да је 'егреп' псеудоним 'греп -Е', али не дајете ниједан пример коришћења 'егреп' са неким регуларним изразом који је написан другачије него када користи 'греп'.
Посвећивање чланка за објашњавање проширених регуларних израза чини ми се смелим, између осталог и зато што постоје овакве странице које се не оглашавају и раде врло важан информативни посао за ГНУ заједницу: https://www.rexegg.com/
Не пишем овде због троловања, намера ми је да све ово, ако неко прочита овај унос да види шта чини 'егреп' или 'греп', погледај друге изворе, овај унос не може бити референца на било шта, објашњава мало, лоше, нуди сувишне информације и може да збуни, посебно за оне који немају знање о ГНУ-у и моћним алатима које он нуди.
Коначно, додали сте и исправили грешку коју сам назначио након свог првог коментара (^ $). Као и на другим веб локацијама, и ви сте требали да наведете особу која је извршила корекцију, или бар да кажете да је то корекција, која је део ГНУ базе, исте базе којом је овај блог покренут и изгубљен.
Поздрав.
Хвала вам на вашем гледишту.
ффсаф