egrep: contoh perintah di GNU / Linux

Egrep

grep ini adalah salah satu alat yang paling sering digunakan pada baris perintah GNU / Linux. Meskipun merupakan alat yang sangat sederhana, ini memungkinkan Anda melakukan banyak operasi. Ini digunakan terutama bersama dengan pipa, untuk dapat menemukan titik tertentu dalam output dari perintah sebelumnya, dll. Tetapi ada juga alat yang dikenal sebagai egrep yang setara dengan menjalankan grep dengan opsi -E.

E berasal dari "Extended regex", yang mengaktifkan opsi -E dan apa yang Anda miliki di egrep secara default tanpa menggunakan opsi itu. Artinya, Anda dapat menggunakan ekspresi reguler yang diperpanjang. Dalam tutorial ini saya tidak akan menjelaskan apa itu ekspresi reguler, bagaimana mereka dapat digunakan dan jenis apa yang ada di * nix. Saya hanya akan menunjukkan contoh praktis dari beberapa hal berguna yang dapat Anda lakukan dengan egrep ...

grep, egrep, dan fgrep serupa. Faktanya, egrep setara dengan grep -E dan fgrep setara dengan grep -F. Artinya, dalam kasus yang menyangkut kita, itu juga akan menafsirkan pola sebagai ekspresi reguler.

Anda mencari baris atau kata dalam satu atau lebih file, seperti halnya dengan grep. Misalnya, Anda ingin mencari kata ubuntu di file bernama snap.txt dan juga di semua file .txt di direktori saat ini:

egrep ubuntu snap.txt

egrep ubuntu *.txt

Pencarian juga bisa rekursif Untuk mencari seluruh isi direktori saat ini:

egrep -r "hola mundo" *

Sejauh ini, kata atau string yang tepat dicari, yaitu, dengan mempertimbangkan huruf besar dan kecil (peka huruf besar-kecil), tetapi jika Anda ingin melakukannya dalam mode tidak peka huruf besar / kecil, tidak peduli apakah itu huruf besar atau kecil, Anda dapat menggunakan yang berikut ini (jika Anda menambahkan w yang hanya menemukan kecocokan lengkap):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

Tunjukkan, bukan kebetulan, tapi nama file di mana kecocokan itu ditemukan:

egrep -l hola *.txt

Tunjukkan hanya pola atau kata dicari di dalam dokumen:

egrep -o printf hola.c

Ingatlah bahwa Anda dapat menggunakan semua kemungkinan yang dapat Anda bayangkan. Anda dapat menggabungkan beberapa opsi yang terlihat sebelumnya, atau Anda dapat melengkapinya dengan opsi lain seperti -A n dan -B n, di mana n jumlah baris yang ingin Anda tunjukkan sebelum (Sebelum) dan sesudah (Sesudah) dari pertandingan atau keduanya pada saat yang sama (C), sehingga Anda dapat melihat apa yang mengelilingi pertandingan:

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

Tekan garis yang berisi kecocokan dan hanya tampilkan yang tidak cocok:

egrep -v "dos" números.doc

Atau jika Anda suka, Anda bisa menggunakan banyak kata atau cocok dengan -e. Sebagai contoh:

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

Jika Anda menggunakan -c hanya dapat menghitung jumlah pertandingan, atau balikkan dengan -v untuk menunjukkan jumlah baris yang tidak cocok. Sebagai contoh:

egrep -c "include" main.c

egrep -v -c "include" main.c

Dan bahkan tunjukkan nomor baris tempat pertandingan telah terjadi, dan juga posisi yang ditempatinya masing-masing:

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

Dan bersama dengan ekspresi reguler kemampuannya dapat diperluas. Misalnya, temukan baris yang dimulai dengan Hello dan diakhiri dengan bye, atau yang dimulai dengan Hello diikuti oleh apa saja, lalu match bye muncul masing-masing:

* Koreksi perintah berikut: berkat komentar pembaca Manuel Alcocer, saya dapat mengubah perintah berikut, karena ada kesalahan.

egrep '^Hola.*adiós$' ejemplo.txt

egrep "Hola.*adiós" ejemplo.txt

Tetapi jika Anda bertanya-tanya tentang perbedaan dengan grep, berikut adalah contoh yang akan menjelaskan kepada Anda ... Dalam kasus menggunakan grep tanpa -E Anda harus menggunakan urutan pelarian sehingga menafsirkan karakter khusus seperti itu, jika tidak maka akan menafsirkan pola seperti itu tanpa memperhitungkannya. Di sisi lain, dengan egrep atau grep -E ini akan memperhitungkannya. Sebagai contoh:
grep '^no\(fork\|group\)' /etc/group

Itu sama dengan:

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

Artinya, ini akan mencari baris yang cocok yang dimulai dengan nofork atau nogroup. Tetapi jika Anda menggunakan ekspresi pertama grep tanpa urutan escape, yang akan dilakukannya adalah mencari pola beton tidak (garpu | grup):

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

Anda juga bisa mencari rentang alfanumerik, atau nilai tertentu, seperti untuk menemukan IP tertentu:
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

Jika mau, Anda dapat menggunakan ekspresi reguler lain untuk melakukan penelusuran yang lebih spesifik. Misalnya | untuk menemukannya kebetulan atau lainnya:

egrep -i '^(printf|scanf)' hola.c

Anda bahkan dapat menemukan huruf besar, huruf kecil, hanya karakter alfabet, atau alfanumerik, dll., menggunakan ekspresi lain seperti: [: alnum:], [: alpha:], [: digit:], [: lower:], [: print:], [: punct:], [: space:], [ : atas:], dll. Misalnya, untuk mencari huruf besar:
egrep [[:upper:]] diccioario

Saya harap ini membantu Anda ... Segera saya akan menjelaskan ekspresi reguler dalam artikel yang didedikasikan khusus untuk itu ...


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   Gambar placeholder Manuel Alcocer dijo

    Selamat siang.

    Beberapa komentar ...

    Anda menjelaskan perintah 'egrep' tetapi tidak membedakan antara 'egrep' dan 'grep', yang seharusnya seperti yang ada di sini.

    Sebagai contoh:
    Dengan grep: ip -4 a | grep '[0-9] \ +'
    Dengan egrep: ip -4 a | egrep '[0-9] +'

    Ahh, dan ini salah, 'egrep "Hello. * Bye" example.txt'; Keberhasilan di sini terjadi ketika ada baris dalam file yang berisi string 'Hello' diikuti dengan apa saja dan diikuti dengan 'selamat tinggal', baris tersebut benar-benar dapat dimulai dan diakhiri dengan apa pun.

    Inilah yang dikatakan artikel itu:
    egrep '^ Halo. * bye $' example.txt

    Dan semua opsi, atau hampir semua (saya tidak berhenti untuk memeriksanya), adalah opsi 'grep' bukan hanya 'egrep'.

    Salam.

    1.    Isaac dijo

      Terima kasih telah melaporkan kesalahan itu. Apa yang Anda komentari ekspresi reguler, saya sudah meletakkannya di paragraf kedua. Saya akan mempersembahkan artikel khusus untuk mereka, karena jumlahnya banyak dan artikel ini akan memakan waktu terlalu lama. Salam!

      1.    Gambar placeholder Manuel Alcocer dijo

        Halo lagi, Isaac.

        Pada paragraf kedua Anda pada dasarnya mengatakan, atau seharusnya mengatakan, bahwa 'egrep' adalah alias dari 'grep -E', tetapi Anda tidak memberikan contoh penggunaan 'egrep' dengan beberapa ekspresi reguler yang ditulis berbeda dari saat digunakan oleh 'grep'.

        Mendedikasikan artikel untuk menjelaskan ekspresi reguler yang diperluas tampaknya berani bagi saya, antara lain karena ada situs seperti ini yang tidak mengiklankan dan melakukan pekerjaan informasi yang sangat penting bagi komunitas GNU: https://www.rexegg.com/

        Saya tidak menulis di sini untuk trolling, maksud saya dengan semua ini adalah jika seseorang membaca entri ini untuk melihat apa yang dilakukan 'egrep' atau 'grep', silakan lihat sumber lain, entri ini tidak bisa menjadi referensi ke apa pun, jelasnya sedikit, buruk, menawarkan informasi yang tidak berguna dan dapat membingungkan, terutama bagi mereka yang tidak memiliki pengetahuan tentang GNU dan alat-alat canggih yang ditawarkannya.

        Akhirnya, Anda telah menambahkan dan memperbaiki bug yang saya tunjukkan setelah komentar pertama saya (^ $). Seperti di situs lain, Anda seharusnya mengutip orang yang membuat koreksi, atau setidaknya mengatakan bahwa itu adalah koreksi, itu adalah bagian dari basis GNU, dasar yang sama dengan awal blog ini dan telah hilang.

        Sebuah ucapan.

        1.    Isaac dijo

          Terima kasih atas sudut pandang Anda.

  2.   FSAFS dijo

    ffsaf.dll