егреп: примери наредбе у ГНУ / Линук

егреп

греп то је један од најчешће коришћених алата на ГНУ / Линук командној линији. Упркос томе што је врло једноставан алат, омогућава вам извођење великог броја операција. Користи се посебно у комбинацији са цевима, да би се пронашле одређене тачке у излазу претходне команде итд. Али постоји и алат познат као егреп који је еквивалентан покретању греп-а са опцијом -Е.

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

греп, егреп и фгреп су слични. У ствари, егреп је еквивалентан греп -Е, а фгреп је еквивалентан греп -Ф. Односно, у случају који се тиче нас, такође ће тумачити обрасце као регуларне изразе.

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

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

Надам се да ће вам помоћи ... Ускоро ћу објаснити регуларне изразе у чланку посвећеном њему ...


5 коментара, остави свој

Оставите свој коментар

Ваша емаил адреса неће бити објављена. Обавезна поља су означена са *

*

*

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

  1.   Мануел Алцоцер дијо

    Добар дан.

    Неколико напомена ...

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

    На пример:
    Са греп: ип -4 а | греп '[0-9] \ +'
    Са егрепом: ип -4 а | егреп '[0-9] +'

    Ах, а ово је погрешно, 'егреп "Здраво. * Ћао" екампле.ткт'; овде се успех дешава када у датотеци постоји ред који садржи низ „Здраво“, праћен било чиме и праћен „збогом“, ред заиста може започети и завршити било чиме.

    Ово би било оно што чланак каже:
    егреп '^ Здраво. * бие $' екампле.ткт

    И све опције, или скоро све (не престајем да то проверим), су опције 'греп', а не искључиво 'егреп'.

    Срдачан поздрав.

    1.    Исак дијо

      Хвала што сте пријавили ту грешку. Оно што коментаришете регуларне изразе, већ сам ставио у други пасус. Посветићу им конкретан чланак, јер их има много и овај чланак би трајао предуго. Поздрав!

      1.    Мануел Алцоцер дијо

        Поздрав поново, Исаац.

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

        Посвећивање чланка за објашњавање проширених регуларних израза чини ми се смелим, између осталог и зато што постоје овакве странице које се не оглашавају и раде врло важан информативни посао за ГНУ заједницу: https://www.rexegg.com/

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

        Коначно, додали сте и исправили грешку коју сам назначио након свог првог коментара (^ $). Као и на другим веб локацијама, и ви сте требали да наведете особу која је извршила корекцију, или бар да кажете да је то корекција, која је део ГНУ базе, исте базе којом је овај блог покренут и изгубљен.

        Поздрав.

        1.    Исак дијо

          Хвала вам на вашем гледишту.

  2.   фсафс дијо

    ффсаф