GNU/Linux >> Belajar Linux >  >> Linux

Perintah Grep di Linux (Dengan Contoh)

Dalam tutorial ini, Anda akan mempelajari cara menggunakan grep . yang sangat penting perintah di Linux. Kami akan membahas mengapa perintah ini penting untuk dikuasai, dan bagaimana Anda dapat menggunakannya dalam tugas sehari-hari di baris perintah.

Mari selami dengan beberapa penjelasan dan contoh.

Mengapa kami menggunakan grep?

Grep adalah alat baris perintah yang digunakan pengguna Linux untuk mencari string teks. Anda dapat menggunakannya untuk mencari file untuk kata atau kombinasi kata tertentu, atau Anda dapat menyalurkan output dari perintah Linux lainnya ke grep, sehingga grep hanya dapat menampilkan output yang perlu Anda lihat.

Mari kita lihat beberapa contoh yang sangat umum. Katakanlah Anda perlu memeriksa isi direktori untuk melihat apakah ada file tertentu di sana. Itu adalah sesuatu yang akan Anda gunakan untuk perintah “ls”.

Namun, untuk membuat seluruh proses pemeriksaan isi direktori ini menjadi lebih cepat, Anda dapat menyalurkan output dari perintah ls ke perintah grep. Mari kita lihat di direktori home kita untuk folder bernama Documents.

Dan sekarang, mari kita coba memeriksa direktori lagi, tetapi kali ini menggunakan grep untuk memeriksa folder Documents secara khusus.

$ ls | grep Documents

Seperti yang dapat Anda lihat pada tangkapan layar di atas, menggunakan perintah grep menghemat waktu kami dengan mengisolasi kata yang kami cari dengan cepat dari sisa keluaran yang tidak perlu yang dihasilkan oleh perintah ls.

Jika folder Documents tidak ada, grep tidak akan mengembalikan output apa pun. Jadi, jika grep tidak menghasilkan apa-apa, itu artinya grep tidak dapat menemukan kata yang Anda cari.

Temukan string

Jika Anda perlu mencari string teks, bukan hanya satu kata, Anda harus membungkus string dalam tanda kutip. Misalnya, bagaimana jika kita perlu mencari direktori "Dokumen Saya" alih-alih direktori "Dokumen" satu kata?

$ ls | grep 'My Documents'

Grep akan menerima tanda kutip tunggal dan tanda kutip ganda, jadi bungkus string teks Anda dengan keduanya.

Meskipun Anda dapat menggunakan grep untuk mencari output yang disalurkan dari alat baris perintah lainnya, Anda juga dapat menggunakannya untuk mencari dokumen secara langsung. Berikut adalah contoh di mana kami mencari dokumen teks untuk sebuah string.

$ grep 'Class 1' Students.txt

Temukan beberapa string

Anda juga dapat menggunakan grep untuk menemukan banyak kata atau string. Anda dapat menentukan beberapa pola dengan menggunakan sakelar -e. Mari kita coba mencari dokumen teks untuk dua string yang berbeda:

$ grep -e 'Class 1' -e Todd Students.txt

Perhatikan bahwa kita hanya perlu menggunakan tanda kutip di sekitar string yang berisi spasi.

Perbedaan antara grep, egrep fgrep, pgrep, zgrep

Berbagai sakelar grep secara historis termasuk dalam binari yang berbeda. Pada sistem Linux modern, Anda akan menemukan sakelar ini tersedia di perintah grep dasar, tetapi distribusi umum juga mendukung perintah lain.

Dari halaman manual untuk grep:

egrep setara dengan grep -E

Sakelar ini akan menafsirkan pola sebagai ekspresi reguler yang diperluas. Ada banyak hal berbeda yang dapat Anda lakukan dengan ini, tetapi berikut adalah contoh penggunaan ekspresi reguler dengan grep.

Mari kita cari dokumen teks untuk string yang berisi dua huruf 'p' berturut-turut:

$ egrep p\{2} fruits.txt

atau

$ grep -E p\{2} fruits.txt

fgrep setara dengan grep -F

Sakelar ini akan menafsirkan pola sebagai daftar string tetap, dan mencoba mencocokkan salah satu dari mereka. Ini berguna saat Anda perlu mencari karakter ekspresi reguler. Ini berarti Anda tidak perlu keluar dari karakter khusus seperti yang Anda lakukan dengan grep biasa.

pgrep adalah perintah untuk mencari nama proses yang berjalan di sistem Anda dan mengembalikan ID prosesnya masing-masing. Misalnya, Anda dapat menggunakannya untuk menemukan ID proses daemon SSH:

$ pgrep sshd

Ini mirip fungsinya dengan hanya menyalurkan output dari perintah 'ps' ke grep.

Anda dapat menggunakan informasi ini untuk menghentikan proses yang sedang berjalan atau memecahkan masalah dengan layanan yang berjalan di sistem Anda.

Anda dapat menggunakan zgrep untuk mencari file terkompresi untuk sebuah pola. Ini memungkinkan Anda untuk mencari file di dalam arsip terkompresi tanpa harus terlebih dahulu mendekompresi arsip itu, pada dasarnya menghemat satu atau dua langkah tambahan.

$ zgrep apple fruits.txt.gz

zgrep juga berfungsi pada file tar, tetapi tampaknya hanya memberi tahu Anda apakah ia dapat menemukan kecocokan atau tidak.

Kami menyebutkan ini karena file yang dikompresi dengan gzip sangat umum merupakan arsip tar.

Perbedaan antara find dan grep

Bagi mereka yang baru memulai di baris perintah Linux, penting untuk diingat bahwa find dan grep adalah dua perintah dengan dua fungsi yang sangat berbeda, meskipun kami menggunakan keduanya untuk "menemukan" sesuatu yang ditentukan pengguna.

Ini berguna untuk menggunakan grep untuk menemukan file saat Anda menggunakannya untuk mencari melalui output dari perintah ls seperti yang kami tunjukkan pada contoh pertama tutorial.

Namun, jika Anda perlu mencari nama file secara rekursif – atau bagian dari nama file jika Anda menggunakan karakter pengganti (tanda bintang) – Anda dapat menggunakan perintah 'find'.

$ find /path/to/search -name name-of-file

Output di atas menunjukkan bahwa perintah find berhasil menemukan file yang kita cari.

Telusuri secara rekursif

Anda dapat menggunakan tombol -r dengan grep untuk mencari secara rekursif melalui semua file dalam direktori dan subdirektori untuk pola tertentu.

$ grep -r pattern /directory/to/search

Jika Anda tidak menentukan direktori, grep hanya akan mencari direktori kerja Anda saat ini. Pada tangkapan layar di bawah, grep menemukan dua file yang cocok dengan pola kita, dan kembali dengan nama file dan direktori tempat mereka berada.

Tangkap ruang atau tab

Seperti yang kami sebutkan sebelumnya dalam penjelasan kami tentang cara mencari string, Anda dapat membungkus teks di dalam tanda kutip jika berisi spasi. Metode yang sama akan berfungsi untuk tab, tetapi kami akan menjelaskan cara menempatkan tab di perintah grep Anda sebentar lagi.

Letakkan spasi atau beberapa spasi di dalam tanda kutip agar grep mencari karakter tersebut.

$ grep " " sample.txt

Ada beberapa cara berbeda untuk menelusuri tab dengan grep, tetapi sebagian besar metode bersifat eksperimental atau mungkin tidak konsisten di seluruh distribusi yang berbeda.

Cara termudah adalah dengan hanya mencari karakter tab itu sendiri, yang dapat Anda hasilkan dengan menekan ctrl+v pada keyboard Anda, diikuti dengan tab.

Biasanya, menekan tab di jendela terminal memberi tahu terminal bahwa Anda ingin melengkapi perintah secara otomatis, tetapi menekan kombinasi ctrl+v sebelumnya akan menyebabkan karakter tab ditulis seperti yang biasanya Anda harapkan di editor teks .

$ grep "    " sample.txt

Mengetahui trik kecil ini sangat berguna saat mengambil file konfigurasi di Linux karena tab sering digunakan untuk memisahkan perintah dari nilainya.

Menggunakan ekspresi reguler

Fungsionalitas Grep diperluas lebih lanjut dengan menggunakan ekspresi reguler, memungkinkan Anda lebih fleksibel dalam pencarian Anda. Beberapa ada, dan kami akan membahas beberapa yang paling umum dalam contoh di bawah ini:

[ ] tanda kurung digunakan untuk mencocokkan salah satu set karakter.

$ grep "Class [123]" Students.txt

Perintah ini akan mengembalikan setiap baris yang mengatakan 'Kelas 1', 'Kelas2', atau 'Kelas 3'.

[-] kurung dengan tanda hubung dapat digunakan untuk menentukan rentang karakter, baik numerik maupun alfabet.

$ grep "Class [1-3]" Students.txt

Kami mendapatkan output yang sama seperti sebelumnya, tetapi perintahnya jauh lebih mudah untuk diketik, terutama jika kami memiliki rentang angka atau huruf yang lebih besar.

^ tanda sisipan digunakan untuk mencari pola yang hanya muncul di awal baris.

$ grep "^Class" Students.txt

[^] kurung dengan tanda sisipan digunakan untuk mengecualikan karakter dari pola pencarian.

$ grep "Class [^1-2]" Students.txt

$ tanda dolar digunakan untuk mencari pola yang hanya muncul di akhir baris.

$ grep "1$" Students.txt

. titik digunakan untuk mencocokkan satu karakter, jadi ini adalah karakter pengganti tetapi hanya untuk satu karakter.

$ grep "A….a" Students.txt

Grep file gz tanpa membuka ritsleting

Seperti yang kami tunjukkan sebelumnya, Anda dapat menggunakan perintah zgrep untuk mencari file terkompresi tanpa harus membuka zipnya terlebih dahulu.

$ zgrep word-to-search /path/to/file.gz

Anda juga dapat menggunakan perintah zcat untuk menampilkan konten file gz dan kemudian menyalurkan output tersebut ke grep untuk mengisolasi baris yang berisi string pencarian Anda.

$ zcat file.gz | grep word-to-search

Gep alamat email dari file zip

Kita dapat menggunakan ekspresi reguler yang bagus untuk mengekstrak semua alamat email dari file zip.

$ grep -o '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' emails.txt

Bendera -o akan mengekstrak alamat email hanya , daripada menampilkan seluruh baris yang berisi alamat email. Ini menghasilkan keluaran yang lebih bersih.

Seperti kebanyakan hal di Linux, ada lebih dari satu cara untuk melakukan ini. Anda juga dapat menggunakan egrep dan kumpulan ekspresi yang berbeda. Tetapi contoh di atas berfungsi dengan baik dan merupakan cara yang cukup sederhana untuk mengekstrak alamat email dan mengabaikan yang lainnya.

Alamat IP grep

Mencari alamat IP bisa menjadi sedikit rumit karena kita tidak bisa hanya memberi tahu grep untuk mencari empat angka yang dipisahkan oleh titik – yah, kita bisa, tetapi perintah itu juga berpotensi mengembalikan alamat IP yang tidak valid.

Perintah berikut akan menemukan dan mengisolasi hanya alamat IPv4 yang valid:

$ grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" /var/log/auth.log

Kami menggunakan ini di server Ubuntu kami hanya untuk melihat dari mana upaya SSH terbaru telah dilakukan.

Untuk menghindari informasi berulang dan mencegahnya membanjiri layar Anda, Anda mungkin ingin menyalurkan perintah grep Anda ke “uniq” dan “lebih” seperti yang kami lakukan pada tangkapan layar di atas.

Grep atau kondisi

Ada beberapa cara berbeda yang dapat Anda gunakan untuk menggunakan suatu atau kondisi dengan grep, tetapi kami akan menunjukkan kepada Anda salah satu yang memerlukan penekanan tombol paling sedikit dan paling mudah diingat:

$ grep -E 'string1|string2' filename

atau, secara teknis menggunakan egrep bahkan lebih sedikit penekanan tombol:

$ egrep 'string1|string2' filename

Abaikan sensitivitas huruf besar/kecil

Secara default, grep peka huruf besar/kecil, yang berarti Anda harus tepat dalam kapitalisasi string pencarian Anda. Anda dapat menghindari ini dengan memberi tahu grep untuk mengabaikan kasus dengan sakelar -i.

$ grep -i string filename

Telusuri dengan peka huruf besar/kecil

Bagaimana jika kita ingin mencari string di mana yang pertama bisa huruf besar atau kecil, tetapi sisa string harus huruf kecil? Mengabaikan huruf besar/kecil dengan sakelar -i tidak akan berfungsi dalam kasus ini, jadi cara sederhana untuk melakukannya adalah dengan tanda kurung.

$ grep [Ss]tring filename

Perintah ini memberi tahu grep agar peka terhadap huruf besar-kecil kecuali untuk huruf pertama.

Grep sama persis

Dalam contoh kami di atas, setiap kali kami mencari dokumen kami untuk string "apel", grep juga mengembalikan "nanas" sebagai bagian dari output. Untuk menghindari ini, dan mencari "apel" dengan ketat, Anda dapat menggunakan perintah ini:

$ grep "\<apple\>" fruits.txt

Anda juga dapat menggunakan sakelar -w, yang akan memberi tahu grep bahwa string harus cocok dengan seluruh baris. Jelas, ini hanya akan berfungsi dalam situasi di mana Anda tidak mengharapkan sisa baris memiliki teks sama sekali.

Kecualikan pola

Untuk melihat konten file tetapi mengecualikan pola dari output, Anda dapat menggunakan tombol -v.

$ grep -v string-to-exclude filename

Seperti yang Anda lihat di tangkapan layar, string yang kami kecualikan tidak lagi ditampilkan saat kami menjalankan perintah yang sama dengan sakelar -v.

Gep dan ganti

Perintah grep yang disalurkan ke sed dapat digunakan untuk mengganti semua instance string dalam file. Perintah ini akan menggantikan "string1" dengan "string2" di semua file relatif terhadap direktori kerja saat ini:

$ grep -rl 'string1' ./ | xargs sed -i 's/string1/string2/g'

Gep dengan nomor baris

Untuk menampilkan nomor baris yang berisi string Anda, gunakan sakelar -n:

$ grep -n string filename

Tampilkan baris sebelum dan sesudah

Jika Anda memerlukan sedikit lebih banyak konteks untuk keluaran grep, Anda dapat menampilkan satu baris sebelum dan sesudah string pencarian yang Anda tentukan dengan sakelar -c:

$ grep -c 1 string filename

Tentukan jumlah baris yang ingin Anda tampilkan – kami hanya melakukan 1 baris dalam contoh ini.

Urutkan hasilnya

Pipa grep output ke perintah sort untuk mengurutkan hasil Anda dalam beberapa jenis urutan. Standarnya adalah abjad.

$ grep string filename | sort

Saya harap Anda menemukan tutorialnya bermanfaat. Terus kembali.


Linux
  1. Perintah Tee Linux dengan Contoh

  2. Perintah kepala Linux dengan Contoh

  3. Perintah JQ di Linux dengan Contoh

  1. Perintah wc Linux dengan Contoh

  2. Perintah sortir Linux dengan Contoh

  3. Perintah Echo di Linux (Dengan Contoh)

  1. Perintah man di Linux dengan Contoh

  2. Perintah AWK di Linux dengan Contoh

  3. 14 Contoh Perintah Grep di Linux