grep

30 Contoh Grep

30 Contoh Grep
Anda dapat menjumpai grep yang terdapat jauh di dalam otak haiwan Unix dan sistem operasi seperti Unix. Ini adalah program asas yang digunakan untuk mencocokkan corak dan ditulis pada tahun 70-an bersama dengan alat UNIX yang lain yang kita kenal dan sukai (atau benci).

Walaupun belajar mengenai bahasa formal dan ungkapan biasa adalah topik yang menarik. Belajar grep mempunyai lebih banyak daripada regex. Untuk memulakannya dan untuk melihat keindahan dan keanggunan grep, anda perlu melihat beberapa contoh dunia nyata terlebih dahulu.

Contoh yang berguna dan menjadikan hidup anda lebih mudah. Berikut adalah 30 kes dan pilihan penggunaan grep biasa.

1. ps aux | grep

Ps aux menyenaraikan semua proses dan pid yang berkaitan. Tetapi selalunya senarai ini terlalu panjang untuk diperiksa oleh manusia. Dengan mengeluarkan output ke perintah grep, anda boleh menyenaraikan proses yang dijalankan dengan mempertimbangkan aplikasi yang sangat spesifik. Contohnya boleh jadi sshd atau nginx atau httpd.

# ps aux | grep sshd
punca 400 0.0 0.2 69944 5624 ?       Ss 17:47 0:00 / usr / sbin / sshd -D
punca 1076 0.2 0.3 95204 6816 ?       Ss 18:29 0:00 sshd: root @ pts / 0
punca 1093 0.0 0.0 12784 932 mata / 0 S + 18:29 0:00 grep sshd

2. Menyekat alamat IP anda

Di kebanyakan sistem operasi, anda boleh menyenaraikan semua antara muka rangkaian anda dan IP yang ditugaskan ke antara muka tersebut dengan menggunakan perintah ifconfig atau ip addr. Kedua-dua arahan ini akan mengeluarkan banyak maklumat tambahan. Tetapi jika anda ingin mencetak hanya alamat IP (katakan untuk skrip shell) maka anda boleh menggunakan perintah di bawah:

$ ip addr | inet grep | awk 'cetak $ 2; '
$ ip addr | grep -w inet | awk 'cetak $ 2; '# Untuk baris dengan hanya inet bukan inet6 (IPv6)

Perintah ip addr mendapat semua perincian (termasuk alamat IP), kemudian disalurkan ke inp grep arahan kedua yang hanya mengeluarkan baris dengan inet di dalamnya. Ini kemudian disalurkan ke awk mencetak pernyataan yang mencetak kata kedua di setiap baris (secara sederhana).

P.S: Anda juga boleh melakukan ini tanpa grep jika anda tahu awk tahu.

3. Melihat percubaan SSH yang gagal

Sekiranya anda mempunyai pelayan yang menghadap Internet, dengan IP awam, ia akan selalu dihujani dengan percubaan SSH dan jika anda membenarkan pengguna mempunyai akses SSH berdasarkan kata laluan (dasar yang tidak akan saya cadangkan) anda dapat melihat semua percubaan yang gagal tersebut menggunakan mengikuti arahan grep:

# cat / var / log / auth.log | grep "Gagal"
Contoh keluar
5 Dis 16:20:03 debian sshd [509]: Kata laluan gagal untuk root dari 192.168.0.100 port 52374 ssh2
5 Dis 16:20:07 debian sshd [509]: Kata laluan gagal untuk root dari 192.168.0.100 port 52374 ssh2
5 Dis 16:20:11 debian sshd [509]: Kata laluan gagal untuk root dari 192.168.0.100 port 52374 ssh2

4. Paip Grep ke Uniq

Kadang kala, grep akan mengeluarkan banyak maklumat. Dalam contoh di atas, satu IP mungkin telah cuba memasuki sistem anda. Dalam kebanyakan kes, hanya ada sebilangan kecil IP yang menyinggung yang perlu anda kenali dan senarai hitam secara unik.

# cat / var / log / auth.log | grep "Gagal" | uniq -f 3

Perintah uniq seharusnya hanya mencetak garis unik. Uniq -f 3 melangkau tiga medan pertama (untuk mengabaikan cap waktu yang tidak pernah diulang) dan kemudian mula mencari garis unik.

5. Grepping untuk Mesej Ralat

Menggunakan Grep untuk akses dan log ralat tidak terhad kepada SSH sahaja. Ralat log pelayan web (seperti Nginx) dan log akses cukup teliti. Sekiranya anda menyiapkan skrip pemantauan yang menghantar makluman kepada anda ketika grep "404" mengembalikan nilai baru. Itu sangat berguna.

# grep -w "404" / var / www / nginx / akses.balak
192.168.0.100 - - [06 / Dec / 2018: 02: 20: 29 +0530] "DAPATKAN / favicon.ico HTTP / 1.1 "404 200
"http: // 192.168.0.102 / "" Mozilla / 5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit / 537.36 (KHTML, seperti Gecko) Chrome / 70.0.3538.110 Safari / 537.36 "
192.168.0.101 - - [06 / Dec / 2018: 02: 45: 16 +0530] "DAPATKAN / favicon.ico HTTP / 1.1 "404 143
"http: // 192.168.0.102 / "" Mozilla / 5.0 (iPad; CPU OS 12_1 seperti Mac OS X)
AppleWebKit / 605.1.15 (KHTML, seperti Gecko) Versi / 12.0 Mudah Alih / 15E148 Safari / 604.1 "

Regex mungkin bukan "404" tetapi beberapa penyaringan regex lain untuk hanya pelanggan Bergerak atau hanya peranti Apple yang melihat halaman web. Ini membolehkan anda mendapat gambaran yang lebih mendalam mengenai bagaimana prestasi aplikasi anda.

6. Penyenaraian Pakej

Untuk sistem berasaskan Debian, dpkg -l menyenaraikan semua pakej yang dipasang pada sistem anda. Anda boleh memasukkannya ke dalam perintah grep untuk mencari pakej milik aplikasi tertentu. Sebagai contoh:

# dpkg -l | grep "vim"

7. grep -v nama fail

Untuk menyenaraikan semua baris yang jangan mengandungi corak yang diberikan, gunakan bendera -v. Ini pada dasarnya adalah kebalikan dari perintah grep biasa.

8. grep -l

Ia menyenaraikan semua fail yang mengandungi sekurang-kurangnya satu kejadian corak yang disediakan. Ini berguna semasa anda mencari corak di dalam direktori dengan banyak fail. Ia hanya mencetak nama fail, dan bukan garis tertentu dengan corak.

9. Pilihan kata tunggal -w

$ grep -w nama fail

Bendera -w memberitahu grep untuk mencari corak yang diberikan sebagai keseluruhan perkataan dan bukan hanya substring garis. Sebagai contoh, sebelum ini kami memanggil alamat IP dan coraknya masuk mencetak garisan dengan kedua-duanya masuk dan inet6 menyenaraikan kedua-dua alamat IPv4 dan IPv6. Tetapi jika kita menggunakan bendera -w hanya garis dengan masuk sebagai perkataan yang didahului dan diikuti oleh ruang putih adalah padanan yang sah.

10. Ungkapan Biasa yang Dipanjangkan

Anda sering akan mendapati bahawa ungkapan biasa yang berasal dari Grep agak terhad. Dalam kebanyakan skrip dan arahan, anda akan menemui penggunaan bendera -E dan ini membolehkan anda memasukkan corak dalam apa yang disebut Mod Dipanjangkan.

Berikut adalah arahan grep dan grep -E untuk mencari perkataan Superman dan Spiderman.

Teks $ grep "\ (Super | Spider \) man"
Teks $ grep -E "(Super | Spider) man"

Seperti yang anda lihat, versi lanjutan jauh lebih senang dibaca.

11. Grep untuk bekas anda

Sekiranya anda mempunyai sekumpulan kontena besar yang berjalan di host anda, anda boleh memasukkannya dengan nama gambar, status, port yang mereka dedahkan dan banyak atribut lain. Sebagai contoh,

$ pelabuhan ps | grep [gambarNama]

12. Grep untuk buah anda

Semasa kita berada di topik kontena. Kubernetes sering cenderung melancarkan beberapa pod di bawah penggunaan tertentu. Walaupun setiap pod mempunyai nama yang unik, di ruang nama tertentu, mereka biasanya bermula dengan nama penyebaran. Kami dapat memanfaatkannya dan menyenaraikan semua pod yang berkaitan dengan penggunaan tertentu.

$ kubectl dapatkan pod | grep

13. Grep untuk data Besar

Sering kali analisis yang disebut "Big Data" melibatkan pencarian, penyortiran dan pengiraan corak dalam satu set data tertentu. Utiliti UNIX tahap rendah seperti grep, uniq, wc sangat bagus dalam hal ini. Ini catatan blog menunjukkan contoh tugas yang baik dalam beberapa saat menggunakan grep dan utiliti Unix yang lain sementara Hadoop mengambil masa hampir setengah jam.

Contohnya, ini set data sudah melebihi 1.Berukuran 7GB. Ini mengandungi maklumat mengenai banyak pertandingan catur, termasuk pergerakan yang dibuat, siapa yang menang, dll. Kami berminat hanya dengan hasil sehingga kami menjalankan perintah berikut:

$ grep "Hasil" jutabase-2.22.pgn | urutkan | uniq -c
221 [Hasil "*"]
653728 [Hasil "0-1"]
852305 [Hasil "1-0"]
690934 [Hasil "1 / 2-1 / 2"]

Proses ini memerlukan masa sekitar 15 saat untuk pemproses 2-core / 4-thread 4 tahun. Oleh itu, pada masa berikutnya anda menyelesaikan masalah "data besar". Fikirkan jika anda boleh menggunakan grep sebagai gantinya.

14. grep -color = automatik

Pilihan ini membolehkan grep menonjolkan corak di dalam garis di mana ia dijumpai.

15. grep -i

Pemadanan corak Grep sememangnya peka huruf besar kecil. Tetapi jika anda tidak mempedulikannya, maka menggunakan bendera -i akan menjadikan kes grep tidak sensitif.

16. grep -n

Bendera -n akan menunjukkan nombor garis sehingga anda tidak perlu risau mencari garis yang sama di kemudian hari.

17. git grep

Git, sistem kawalan versi, sendiri mempunyai perintah grep terbina dalam yang berfungsi sama seperti grep biasa anda. Tetapi ia dapat digunakan untuk mencari corak pada setiap pohon yang berkomitmen menggunakan CLI git asli, bukan paip yang membosankan. Contohnya, jika anda berada di cawangan induk repo anda, anda boleh melintasi repo menggunakan:

(tuan) $ git grep

18. grep -o

Bendera -o sangat membantu ketika anda cuba menyahpepijat regex. Ia hanya akan mencetak bahagian garis yang sepadan, bukan keseluruhan garis. Oleh itu, sekiranya anda mendapatkan terlalu banyak garis yang tidak diingini untuk corak yang disediakan, dan anda tidak dapat memahami mengapa perkara itu berlaku. Anda boleh menggunakan bendera -o untuk mencetak substring yang menyinggung dan alasan mengenai regex anda ke belakang dari sana.

19. grep -x

Bendera -x akan mencetak garis, jika dan hanya jika, keseluruhan garis sepadan dengan regex yang anda berikan. Ini agak serupa dengan bendera -w yang mencetak garis jika dan hanya keseluruhan perkataan yang sesuai dengan regex yang disediakan.

20. grep -T

Semasa berurusan dengan log dan output dari skrip shell, anda cenderung menghadapi tab keras untuk membezakan antara lajur output yang berbeza. Bendera -T akan menyelaraskan tab ini dengan kemas sehingga lajur disusun dengan kemas, menjadikan output manusia dapat dibaca.

21. grep -q

Ini menekan output dan menjalankan perintah grep secara senyap-senyap. Sangat berguna semasa mengganti teks, atau menjalankan grep dalam skrip daemon.

22. grep -P

Orang yang biasa menggunakan sintaks ungkapan biasa boleh menggunakan bendera -P untuk menggunakan tepat. Anda tidak perlu belajar ungkapan biasa biasa, yang menggunakan grep secara lalai.

23. grep -D [TINDAKAN]

Di Unix, hampir semuanya boleh dianggap sebagai fail. Akibatnya, mana-mana peranti, soket, atau aliran data FIFO dapat dimasukkan ke grep. Anda boleh menggunakan bendera -D diikuti dengan TINDAKAN (tindakan lalai adalah BACA). Beberapa pilihan lain adalah SKIP untuk melangkau peranti tertentu secara diam-diam dan RECURSE untuk melalui direktori dan pautan sym secara berulang.

24. Pengulangan

Sekiranya mencari corak tertentu yang merupakan pengulangan corak sederhana yang diketahui, maka gunakan pendakap kerinting untuk menunjukkan jumlah pengulangan

$ grep -E "[0-9] 10"

Ini mencetak garis yang mengandungi rentetan 10 digit atau lebih.

25. Singkatan pengulangan

Beberapa watak khas disediakan untuk pengulangan corak tertentu. Anda boleh menggunakan ini sebagai pengganti keriting, jika sesuai dengan keperluan anda.

? : Pola tanda tanya sebelum ini mesti sepadan dengan sifar atau satu masa.

*: Corak bintang sebelumnya harus sepadan dengan sifar atau lebih banyak kali.

+ : Pola tambah sebelum harus sepadan dengan satu atau beberapa kali.

25. Offset Set Byte

Sekiranya anda ingin tahu melihat bait mengimbangi garis di mana ungkapan yang sesuai dijumpai, anda boleh menggunakan bendera -b untuk mencetak offset juga. Untuk mencetak offset pada bahagian garis yang sepadan, anda boleh menggunakan bendera -b dengan bendera -o.

$ grep -b -o [nama fail]

Offset bermaksud, setelah berapa bait dari awal fail bermula rentetan yang sesuai.

26. egrep, fgrep dan rgerp

Anda sering akan melihat pemakaian egrep, untuk menggunakan sintaks ungkapan biasa yang telah dibincangkan sebelumnya. Walau bagaimanapun, ini adalah sintaks yang tidak digunakan lagi dan disarankan agar anda tidak menggunakannya. Gunakan grep -E sebagai gantinya. Begitu juga, gunakan grep -F, bukan fgrep dan grep -r bukan rgrep.

27. grep -z

Kadang kala input ke grep bukanlah garis yang diakhiri dengan watak barisan baru. Contohnya, jika anda memproses senarai nama fail, mereka mungkin datang dari sumber yang berbeza. Bendera -z memberitahu grep untuk memperlakukan watak NULL sebagai garis akhir. Ini membolehkan anda memperlakukan aliran masuk seperti fail teks biasa.

28. grep -a [nama fail]

Bendera -a memberitahu grep untuk memperlakukan fail yang disediakan seolah-olah itu adalah teks biasa. Failnya boleh menjadi binari, tetapi grep akan merawat isi di dalamnya, seolah-olah teks.

29. grep -U [nama fail]

Bendera -U memberitahu grep untuk memperlakukan fail yang dibekalkan seolah-olah ia adalah fail binari dan bukan teks. Secara lalai grep meneka jenis fail dengan melihat beberapa bait pertama. Menggunakan peraturan bendera ini yang meneka berfungsi.

30. grep -m NUM

Dengan fail yang besar, pengambilan ekspresi dapat berlangsung selama-lamanya. Walau bagaimanapun, jika anda ingin memeriksa hanya NUM bilangan perlawanan yang pertama, anda boleh menggunakan bendera -m untuk mencapainya. Ia lebih cepat dan outputnya juga dapat dikendalikan.

Kesimpulannya

Sebilangan besar pekerjaan sehari-hari seorang sysadmin melibatkan penyaringan melalui sebilangan besar teks. Ini mungkin log keselamatan, log dari pelayan web atau mel anda, aktiviti pengguna atau bahkan teks halaman man besar. Grep memberi anda sedikit kelonggaran ketika menangani kes penggunaan ini.

Mudah-mudahan, beberapa contoh dan kes penggunaan di atas dapat membantu anda memahami dengan lebih baik fosil perisian ini.

Cara Membangunkan Permainan di Linux
Satu dekad yang lalu, tidak banyak pengguna Linux akan meramalkan bahawa sistem operasi kegemaran mereka suatu hari nanti akan menjadi platform permai...
Port Sumber Terbuka Mesin Permainan Komersial
Rekreasi enjin permainan sumber terbuka dan bebas platform boleh digunakan untuk bermain lama dan juga beberapa tajuk permainan yang baru-baru ini. Ar...
Permainan Perintah Terbaik untuk Linux
Baris perintah bukan hanya sekutu terbesar anda ketika menggunakan Linux-ia juga dapat menjadi sumber hiburan kerana anda dapat menggunakannya untuk m...