egrep: GNU / Linuxтогу буйруктун мисалдары

egrep

талаасынын бул GNU / Linux буйрук сабында эң көп колдонулган куралдардын бири. Абдан жөнөкөй курал болгонуна карабастан, көптөгөн операцияларды жасоого мүмкүнчүлүк берет. Бул, өзгөчө, түтүкчөлөр менен бирге колдонулуп, мурунку буйруктун чыгышында белгилүү бир чекиттерди табуу үчүн ж.б. Бирок, ошондой эле, egrep деп аталган курал бар, ал -E опциясы менен grep иштеткенге барабар.

Электрондук почта "Extended regex" -тен келип чыгат, ал -E параметрин жандырат жана сизде ошол параметрди колдонбостон, egrepде эмне бар. Башкача айтканда, сиз колдоно аласыз кеңейтилген туруктуу сөз айкаштары. Бул колдонмодо мен туруктуу сөз айкаштары деген эмне экендигин, аларды кандайча колдонсо болоорун жана * nix кандай түрлөрү бар экендигин түшүндүрүп бербейм. Мен жөн гана egrep менен жасай турган кээ бир пайдалуу нерселердин практикалык мисалдарын көрсөтөм ...

grep, egrep жана fgrep окшош. Чындыгында, egrep grep -Eге жана fgrep grep -Fге барабар. Башкача айтканда, бизди кызыктырган учурда, ал калыптарды туруктуу сөз айкаштары катары чечмелейт.

Сиз сапты же сөздү издөө бир же бир нече файлда, ошондой эле grep менен болгон нерсе. Мисалы, snap.txt деп аталган файлдан жана учурдагы каталогдогу .txt файлдардан ubuntu сөзүн издей турганыңызды элестетип көрсөңүз:

egrep ubuntu snap.txt

egrep ubuntu *.txt

Издөө дагы болушу мүмкүн рекурсивдүү Учурдагы каталогдун мазмунун толугу менен издөө үчүн:

egrep -r "hola mundo" *

Азырынча, так сөздөр же саптар изделди, башкача айтканда, чоң жана кичине тамгаларды эске алуу менен (кичинекей тамга), бирок сиз муну регистрге ылайыксыз режимде жасагыңыз келсе, алар чоң же кичине болгонуна карабастан, сиз төмөнкүлөрдү колдоно аласыз (эгер сиз w кошсоңуз, анда ал толугу менен дал келгендерди гана табат):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

Көрсөт, кокустуктар эмес, бирок ошол дал келген файлдардын аттары:

egrep -l hola *.txt

Үлгүнү же сөздү гана көрсөтүңүз документтин ичинде изделген:

egrep -o printf hola.c

Элестете турган бардык мүмкүнчүлүктөрдү колдоно алаарыңызды унутпаңыз. Мурда көрүлгөн параметрлердин бир нечесин бириктирсеңиз болот, же башка параметрлер менен толуктай аласыз, мисалы -A n жана -B n, бул жерде n чейин (чейин) жана кийин (кийин) көрсөтүүнү каалаган саптардын саны матчтын же экөөнүн бир эле учурда (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

Же кааласаңыз, колдоно аласыз бир нече сөз же -e менен дал келет. Мисалы:

egrep -v -e "uno" -e "dos" -e "tres" números.txt

Эгер сиз колдонгон -c матчтардын санын гана эсептей алат, же туура келбеген сызыктардын санын көрсөтүү үчүн -v менен которуңуз. Мисалы:

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 менен айырмачылыгы жөнүндө ойлонуп жатсаңыз, мисал келтире кетейин ... Grep -E жок колдонулган учурда, сиз качуу ырааттуулуктары ошондуктан ал атайын белгилерди ушундай чечмелеп берет, антпесе аларды эске албай туруп, шаблонду ушундай чечмелейт. Башка жагынан алганда, egrep же grep -E менен аларды эске алат. Мисалы:
grep '^no\(fork\|group\)' /etc/group

Бул барабар болмок:

grep -E '^no(fork|group)' /etc/group
egrep '^no(fork|group)' /etc/group

Башкача айтканда, nofork же nogroup менен башталган дал келген саптарды издейт. Бирок, эгерде сиз Grepтин биринчи сөз айкашын качып кетүү ыраатынсыз колдонгон болсоңуз, анда ал издөө болмок бетон үлгүсү жок (айры | топ):

grep 'no(fork|group)' /etc/group

Ошондой эле издөөгө болот тамга-цифралык диапазондор, же белгилүү бир IPлерди табуу сыяктуу белгилүү бир маанилер:
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

Жада калса анын ордун аныктай аласыз чоң тамга, кичине тамга, тамга белгилери гана же тамга-сандык ж.б., [: alnum:], [: альфа:], [: сан:], [: төмөнкү:], [: басып чыгаруу:], [: пункт:], [: орун:], [сыяктуу башка сөздөрдү колдонуп. : жогорку:], ж.б. Мисалы, чоң тамга издөө үчүн:
egrep [[:upper:]] diccioario

Бул сизге жардам берет деп үмүттөнөм ... Жакында ага арналган макалада туруктуу сөз айкаштарын түшүндүрүп берем ...


Макаланын мазмуну биздин принциптерге карманат редакциялык этика. Ката жөнүндө кабарлоо үчүн чыкылдатыңыз бул жерде.

5 комментарий, өзүңүздүкүн калтырыңыз

Комментарий калтырыңыз

Сиздин электрондук почта дареги жарыяланбайт. Милдеттүү талаалар менен белгиленет *

*

*

  1. Маалыматтар үчүн жооптуу: Мигель Анхель Гатан
  2. Маалыматтын максаты: СПАМды көзөмөлдөө, комментарийлерди башкаруу.
  3. Мыйзамдуулук: Сиздин макулдугуңуз
  4. Маалыматтарды берүү: Маалыматтар үчүнчү жактарга юридикалык милдеттенмелерден тышкары билдирилбейт.
  5. Маалыматтарды сактоо: Occentus Networks (ЕС) тарабынан уюштурулган маалыматтар базасы
  6. Укуктар: Каалаган убакта маалыматыңызды чектеп, калыбына келтирип жана жок кыла аласыз.

  1.   Manuel Alcocer placeholder image ал мындай деди:

    Негизинен жакшы болду.

    Бир нече эскертүүлөр ...

    Сиз "egrep" буйругун түшүндүрүп бересиз, бирок "egrep" менен "grep" ортосунда айырмачылыкты койбоңуз, ал ушул жерде болушу керек.

    Мисалы:
    Grep менен: ip -4 a | grep '[0-9] \ +'
    Egrep менен: ip -4 a | egrep '[0-9] +'

    Ахх, жана бул туура эмес, 'egrep "Hello. * Bye" example.txt'; файлда "Салам" сабын камтыган жана андан кийин "коштошуу" сабын камтыган сап болгондо, ийгилик чындыгында башталып, каалаган менен аякташы мүмкүн.

    Макалада мындай делет:
    egrep '^ Салам. * bye $' example.txt

    Жана бардык варианттар, же дээрлик бардыгы (мен аны текшерүүнү токтотпойм), бул "egrep" эмес, "grep" варианттары.

    Урматтоо менен.

    1.    Ыскак ал мындай деди:

      Ошол ката жөнүндө кабарлаганыңыз үчүн рахмат. Туруктуу сөздөргө кандай комментарий берсеңиз, мен аны экинчи абзацка киргиздим. Мен аларга белгилүү бир макала арнайм, анткени алардын саны көп жана бул макала өтө эле көп убакытты талап кылат. Салам!

      1.    Manuel Alcocer placeholder image ал мындай деди:

        Дагы бир жолу салам, Ыскак.

        Экинчи абзацта сиз негизинен "egrep" - "grep -E" деген каймана ат деп айткансыз, же айтпашыңыз керек эле, бирок "egrep" дегенди кээ бир туруктуу сөз айкаштары менен башкача жазылган айрым мисалдар келтирген жоксуз 'grep' тарабынан колдонулат.

        Кеңейтилген туруктуу сөз айкаштарын түшүндүрүү үчүн макаланы арноо мага башка нерселердин катарына кирет, анткени мындай сайттарды жарнамалабайт жана GNU коомчулугу үчүн абдан маанилүү маалыматтык жумуштарды жасап жатышат: https://www.rexegg.com/

        Мен бул жерде троллинг үчүн жазган жокмун, мунун баары менин оюм, эгер кимдир бирөө бул жазууну "egrep" же "grep" эмне кыларын билүү үчүн окуса, анда башка булактарды карап көрүңүз, бул жазуу эч нерсеге шилтеме боло албайт, ал түшүндүрөт анча-мынча, жаман, ашыкча маалыматтарды сунуштайт жана түшүнүксүз болуп калышы мүмкүн, айрыкча GNU жана ал сунуш кылган күчтүү шаймандар жөнүндө билими жоктор үчүн.

        Акыр-аягы, сиз менин биринчи комментарийимден кийин көрсөткөн катаны (^ $) кошуп, оңдодуңуз. Башка сайттардагыдай эле, сиз GNU базасынын бир бөлүгү болгон оңдоо киргизген адамга шилтеме беришиңиз керек же жок эле дегенде ушул блог ачылган жана жоголгон.

        А салам.

        1.    Ыскак ал мындай деди:

          Сиздин көз карашыңыз үчүн рахмат.

  2.   fsafs ал мындай деди:

    ffsaf