Perintah grep yang merupakan singkatan dari “global regular expression print” adalah salah satu perintah yang paling kuat dan umum digunakan di Linux.

Grep mencari satu atau lebih file input untuk baris yang cocok dengan pola yang diberikan dan menulis setiap baris yang cocok dengan output standar. Jika tidak ada file yang ditentukan, grep membaca dari input standar yang biasanya merupakan output dari perintah lain.

Dalam tutorial ini, kami akan menunjukkan kepada Anda bagaimana menggunakan perintah grep melalui contoh-contoh praktis dan penjelasan terperinci dari opsi grep GNU yang paling umum.

Sintaks Perintah Grep

Sebelum membahas cara menggunakan perintah Grep, mari kita mulai dengan meninjau sintaks dasar.

Ekspresi utilitas Grep mengambil bentuk berikut:

grep [OPTIONS] PATTERN [FILE...]

Item dalam tanda kurung adalah opsional.

  • OPTIONS – Grep menyediakan sejumlah opsi yang mengontrol perilakunya.
  • PATTERN – Pola pencarian.
  • FILE – Nol atau lebih banyak nama file input.

Cara menggunakan Grep untuk Mencari String di File

Penggunaan paling mendasar dari perintah grep adalah untuk mencari string (teks) dalam file.

Misalnya, untuk menampilkan baris dari file /etc/passwd yang berisi string bash, Anda dapat menggunakan perintah berikut:

grep bash /etc/passwd

Outputnya akan terlihat seperti ini:

root❌0:0:root:/root:/bin/bash
linux❌1000:1000:linux:/home/linux:/bin/bash

Jika string menyertakan spasi, Anda harus melampirkannya dalam tanda kutip tunggal atau ganda:

grep "Gnome Display Manager" /etc/passwd

Grep Invert Match (Exclude)

Untuk menampilkan garis yang tidak cocok dengan pola, gunakan opsi -v (atau --invert-match).

Misalnya untuk menampilkan baris dari file /etc/passwd yang tidak mengandung string nologin. Anda dapat menggunakan perintah berikut:

grep -v nologin /etc/passwd
root❌0:0:root:/root:/bin/bash
colord❌124:124::/var/lib/colord:/bin/false
git❌994:994:git daemon user:/:/usr/bin/git-shell
linux❌1000:1000:linux:/home/linux:/bin/bash

Grep untuk Mencari String di Output perintah

Alih-alih jika menentukan file input, Anda dapat mem-pipe output dari perintah lain ke grep, dan kemudian hanya menampilkan baris yang cocok dengan pola yang diberikan.

Misalnya, untuk mengetahui proses mana yang berjalan pada sistem Anda sebagai user www-data, Anda dapat menggunakan perintah berikut:

ps -ef | grep www-data
www-data 18247 12675  4 16:00 ?        00:00:00 php-fpm: pool www
root     18272 17714  0 16:00 pts/0    00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data
www-data 31147 12770  0 Oct22 ?        00:05:51 nginx: worker process
www-data 31148 12770  0 Oct22 ?        00:00:00 nginx: cache manager process

Anda juga dapat merangkai beberapa pipe di perintah. Seperti yang Anda lihat di output di atas, ada juga baris yang berisi proses grep. Jika Anda tidak ingin baris itu ditampilkan, berikan output ke contoh grep lain seperti yang ditunjukkan di bawah ini.

ps -ef | grep www-data | grep -v grep
www-data 18247 12675  4 16:00 ?        00:00:00 php-fpm: pool www
root     18272 17714  0 16:00 pts/0    00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data
www-data 31147 12770  0 Oct22 ?        00:05:51 nginx: worker process
www-data 31148 12770  0 Oct22 ?        00:00:00 nginx: cache manager process

Grep : Pencarian Recursive

Untuk mencari pola secara rekursif, gunakan opsi -r (atau --recursive). Metode ini akan mencari melalui semua file di direktori yang ditentukan, melewatkan symlink yang ditemui secara rekursif. Untuk mengikuti semua symbolic links, gunakan opsi -R (atau --dereference-recursive).

Dalam contoh berikut ini kita sedang mencari string example.com di semua file di dalam direktori /etc:

grep -r example.com /etc

Perintah akan mencetak garis yang cocok diawali oleh path lengkap ke file.

/etc/hosts:127.0.0.1 node2.example.com
/etc/nginx/sites-available/example.com:    server_name example.com   www.example.com;

Jika alih – alih menggunakan -r , Anda menggunakan opsi -R grep akan mengikuti semua symbolic links:

grep -R example.com /etc

Perhatikan baris terakhir dari output. Baris itu tidak dicetak dalam contoh di atas karena file di dalam direktori sites-enabled Nginx adalah symlink ke file konfigurasi di dalam direktori sites-available.

/etc/hosts:127.0.0.1 node2.example.com
/etc/nginx/sites-available/example.com:    server_name example.com   www.example.com;
/etc/nginx/sites-enabled/example.com:    server_name example.com   www.example.com;

Grep Tampilkan Hanya Nama File

Untuk menekan output grep default dan hanya mencetak nama file yang berisi pola yang cocok Anda dapat menggunakan opsi -l (atau --files-with-matches).

Misalnya untuk mencari melalui semua file yang diakhiri dengan .conf di direktori kerja saat ini dan hanya mencetak nama-nama file yang berisi tipe string example.com:

grep -l example.com *.conf

Outputnya akan terlihat seperti ini:

tmux.conf
haproxy.conf

Opsi -l biasanya digunakan dalam kombinasi dengan opsi rekursif atau -R:

grep -Rl example.com /tmp

Grep Case Insensitive.

Secara default, perintah grep adalah case sensitive (peka huruf besar kecil) yang berarti bahwa huruf besar dan huruf kecil diperlakukan sebagai berbeda.

Untuk mengabaikan case saat mencari, gunakan opsi -i (atau --ignore-case).

Misalnya, ketika mencari kata Singa tanpa opsi apa pun, perintah berikut tidak akan menampilkan output apa pun, bahkan jika ada baris yang cocok.

grep Singa /usr/share/words

Tetapi jika Anda melakukan pencarian case-sensitive menggunakan opsi -i, maka akan mencari setiap kata dengan kecocokan huruf besar dan kecil:

grep -i Singa /usr/share/words

Dengan menggunakan kata “Singa” akan cocok dengan “singa”, “SinGa” atau kombinasi huruf besar dan kecil lainnya untuk string tersebut.

singa
sInGa's
siNGA

Grep Kata Lengkap

Saat mencari kata aku , grep juga akan mencetak baris tempat dimana kata aku juga disematkan dalam kata-kata yang lebih besar, seperti akurasi,ketakutan misalnya.

grep aku /usr/share/words
aku
akurasi
baku
daku
ketakutan
pelaku
pengakuan
saku

Untuk mengembalikan hanya baris-baris di mana string yang ditentukan adalah seluruh kata (di tutup oleh karakter non-kata), Anda dapat menggunakan opsi -w (atau --word-regexp).

Karakter kata termasuk karakter alfanumerik (a-z, A-Z dan 0-9) dan garis bawah (_). Semua karakter lain dianggap sebagai karakter non-kata.

Jika Anda menjalankan perintah yang sama seperti di atas termasuk opsi -w, perintah grep hanya akan menampilkan output baris-baris di mana kata aku dimasukkan sebagai kata yang tunggal dan terpisah dengan karakter lain.

grep -w aku /usr/share/words
aku

Grep Untuk Menampilkan Nomor Baris

Untuk menunjukkan jumlah baris yang berisi string yang cocok dengan pola, gunakan opsi -n (atau --line-number). Saat menggunakan opsi ini, grep akan mencetak kecocokan ke output standar yang diawali dengan nomor baris yang ditemukan.

Sebagai contoh untuk menampilkan baris-baris dari file /etc/services yang berisi string bash yang diawali dengan nomor baris yang cocok, Anda dapat menggunakan perintah berikut:

grep -n 10000 /etc/services

Output di bawah ini menunjukkan kepada kita bahwa kecocokan ditemukan pada baris 10423 dan 10424.

10423:ndmp            10000/tcp
10424:ndmp            10000/udp

Grep Untuk Menampilkan Jumlah yang Cocok

Untuk mencetak jumlah baris yang cocok dengan output standar, gunakan opsi -c (atau --count).

Dalam contoh di bawah ini, kita akan menghitung jumlah akun yang memiliki /usr/bin/zsh sebagai shell.

grep -c '/usr/bin/zsh' /etc/passwd
4

Grep Multiple Strings (Pola)

Grep untuk menampilkan Dua atau lebih pola pencarian dapat digabungkan oleh OR atau |.

Secara default, Grep menginterpretasikan pola sebagai regular expression dasar di mana meta-karakter seperti | kehilangan makna khusus mereka dan versi backslashed ( / ) harus digunakan.

Dalam contoh di bawah ini kita akan mencari semua kata fatal, error dan critical dalam file error log Nginx:

grep 'fatal\|error\|critical' /var/log/nginx/error.log

Jika Anda menggunakan opsi regular expression dengan -E (atau --extended-regexp) maka operator | tidak boleh escaped, seperti yang ditunjukkan di bawah ini:

grep -E 'fatal|error|critical' /var/log/nginx/error.log

Grep Regular Expression

GNU Grep memiliki dua set fitur regular expression, Basic dan Extended. Secara default Grep menginterpretasikan pola sebagai regular expression Basic, untuk beralih ke regular expression yang Extended, Anda perlu menggunakan opsi -E .

Ketika digunakan dalam mode regular expression basic, semua karakter lain kecuali metakarakter, sebenarnya adalah regular expression yang cocok dengan dirinya sendiri. Di bawah ini adalah daftar karakter meta yang paling umum digunakan:

  • Gunakan simbol ^ (caret) untuk mencocokkan ekspresi pada awal baris. Berikut ini, contoh string ^banteng hanya akan cocok kata itu ada di awal baris.
    grep "^banteng" file.txt
  • Gunakan simbol $ (dollar) untuk mencocokkan ekspresi di akhir baris. Pada contoh berikut, string anoa$ hanya akan cocok jika kata itu terjadi di akhir baris.
    grep "banteng$" file.txt
  • Gunakan simbol . (titik) untuk mencocokkan karakter tunggal apa pun. Misalnya, untuk mencocokkan apa pun yang dimulai dengan ban kemudian memiliki dua karakter dan diakhiri dengan string ng, Anda dapat menggunakan pola berikut:
    grep "ban..ng" file.txt
  • Gunakan [ ] untuk mencocokkan karakter tunggal apa saja yang ada di dalam tanda kurung. Misalnya, temukan baris yang berisi accept atau accent, Anda dapat menggunakan pola berikut:
    grep "acce[np]t" file.txt
  • Gunakan [] untuk mencocokkan setiap karakter tunggal yang terlampir di dalam tanda kurung. Pola berikut akan cocok dengan kombinasi string yang mengandung co (huruf_apapun_kecuali_l) a, seperti coca, cobalt dan sebagainya, tetapi tidak akan cocok dengan baris yang mengandung kata cola,
    grep "co[^l]a" file.txt

Untuk menghindari makna khusus dari karakter berikutnya, gunakan simbol \ (garis miring terbalik).

Grep Extended Regular Expression

Untuk menginterpretasikan pola sebagai extended regular expression, gunakan opsi -E (atau --extended-regexp). Extended regular expressions mencakup semua meta-karakter dasar, bersama dengan meta-karakter tambahan untuk membuat pola pencarian yang lebih kompleks dan kuat. Di bawah ini adalah beberapa contoh:

  • Cocokkan dan ekstrak semua alamat email dari file yang diberikan:
    grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
  • Cocokkan dan ekstrak semua alamat IP yang valid dari file yang diberikan:
    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]?)' file.txt

Opsi -o digunakan untuk mencetak hanya string yang cocok.

Grep Print Baris Sebelum Kecocokan

Untuk mencetak sejumlah baris tertentu sebelum mencocokkan baris, gunakan opsi -B (atau --before-context).

Misalnya, untuk menampilkan 5 baris konteks pertama sebelum mencocokkan baris, Anda dapat menggunakan perintah berikut:

grep -B 5 root /etc/passwd

Grep Print Baris setelah Kecocokan

Untuk mencetak sejumlah baris tertentu setelah ada kecocokan, gunakan opsi -A (atau --after-context).

Misalnya untuk menampilkan 5 baris dari konteks setelah baris yang cocok, Anda dapat menggunakan perintah berikut

grep -A 5 root /etc/passwd

Kesimpulan

Dalam tutorial ini, Anda belajar cara menggunakan Grep untuk mencari pola di dalam file. Sebenarnya ini adalah dasar untuk grep dan masih banyak lagi untuk dipelajari tentang Grep di halaman Panduan Grep.