egrep: GNU / Linux командасының мысалдары

egrep

grep бұл GNU / Linux командалық жолында ең көп қолданылатын құралдардың бірі. Өте қарапайым құрал болғанына қарамастан, ол көптеген операцияларды орындауға мүмкіндік береді. Ол әсіресе құбырлармен бірге қолданылады, алдыңғы команданың нәтижесінде нақты нүктелерді табуға және т.б. Сонымен қатар -E опциясымен grep іске қосуға тең келетін egrep деп аталатын құрал бар.

E «Extended regex» -тен келеді, яғни -E опциясын іске қосады және сізде egrep-де осы параметрді қолданбай-ақ бар. Яғни сіз кеңейтілген тұрақты тіркестер. Бұл оқулықта мен тұрақты тіркестердің не екенін, оларды қалай қолдануға болатындығын және * nix-де қандай түрлері бар екенін түсіндіруге тырыспаймын. Мен сізге егреппен жасауға болатын кейбір пайдалы істердің практикалық мысалдарын көрсетемін ...

grep, egrep және fgrep ұқсас. Шындығында, egrep grep -E-ге, ал fgrep grep -F-ге баламалы. Яғни, бізге қатысты жағдайда ол заңдылықты тұрақты тіркестер ретінде түсіндіреді.

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

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

Сіз өзіңіздің елестететін барлық мүмкіндіктеріңізді пайдалана алатыныңызды ұмытпаңыз. Бұрын көрілген бірнеше нұсқаны біріктіруге болады немесе оларды басқа параметрлермен толықтыруға болады, мысалы nA-және -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-тің айырмашылығы туралы ойлансаңыз, онда мұны түсінікті болатын мысал келтіре аласыз ... GE-ді қолданбаған жағдайда, сіз қашу реттілігі сондықтан ол арнайы таңбаларды осылай түсіндіреді, әйтпесе ол оларды ескермей, сол сияқты өрнекті түсіндіреді. Екінші жағынан, egrep немесе grep -E көмегімен оларды ескеру қажет. Мысалға:
grep '^no\(fork\|group\)' /etc/group

Бұл балама болады:

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

Яғни, nofork немесе ногруппадан басталатын сәйкес сызықтарды іздейді. Егер сіз 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.   Мануэль Алькокер дижо

    Қайырлы кеш.

    Бірнеше ескертулер ...

    Сіз «egrep» пәрменін түсіндіресіз, бірақ «egrep» пен «grep» арасындағы айырмашылықты қоймаңыз, ол осы жерде болуы керек.

    Мысалы:
    Grep: ip -4 a | grep '[0-9] \ +'
    Egrep: ip -4 a | арқылы egrep '[0-9] +'

    Ахх, және бұл дұрыс емес, 'egrep «Сәлем. * Қош бол» example.txt'; Мұнда сәттілік файлда 'Hello' жолын қамтитын жол болғанда, одан кейін кез-келген және одан кейін 'bye' болатын кезде пайда болады, жол шынымен басталып, кез-келгенмен аяқталуы мүмкін.

    Мақалада былай делінген:
    egrep '^ Сәлеметсіз бе. * bye $' example.txt

    Барлық опциялар немесе барлығы дерлік (мен оны тексеруді тоқтатпаймын) тек «egrep» емес «grep» нұсқалары.

    Құрметпен.

    1.    Ысқақ дижо

      Бұл қате туралы хабарлағаныңыз үшін рақмет. Сіз тұрақты тіркестерге не айтасыз, мен оны екінші абзацқа салдым. Мен оларға нақты мақаланы арнаймын, өйткені олардың саны көп және бұл мақала тым ұзаққа созылуы мүмкін. Сәлем!

      1.    Мануэль Алькокер дижо

        Қайта сәлем, Ысқақ.

        Екінші абзацта сіз негізінен «egrep» - «grep -E» бүркеншік аты деп айтасыз, немесе айтуыңыз керек еді, бірақ сіз «egrep» -ді кейбір тұрақты өрнектермен, қашан жазылғанынан басқаша жазылған мысал келтірмейсіз 'grep' арқылы қолданылады.

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

        Мен мұнда троллинг үшін жазып отырған жоқпын, мұның бәрі менің ниетім, егер біреу осы жазбаны «egrep» немесе «grep» не істейтінін білу үшін оқыса, басқа дереккөздерді іздеңіз, бұл жазба ештеңеге сілтеме бола алмайды, ол түсіндіреді аз, жаман, артық ақпарат ұсынады және түсініксіз болуы мүмкін, әсіресе GNU және оның ұсынатын қуатты құралдары туралы білмейтіндер үшін.

        Сонымен, сіз менің бірінші түсініктемемнен кейін көрсеткен қатені (^ $) қосып, жөндедіңіз. Басқа сайттардағы сияқты, сіз түзету енгізген адамға сілтеме жасауыңыз керек немесе ең болмағанда оны түзету деп айтуыңыз керек, бұл GNU базасының бөлігі, осы блог ашылған және жоғалған сол негіз.

        А құттықтау.

        1.    Ысқақ дижо

          Сіздің көзқарасыңыз үшін рахмет.

  2.   фсафтар дижо

    ffsaf