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, stringanoa$
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 denganban
kemudian memiliki dua karakter dan diakhiri dengan stringng
, 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 berisiaccept
atauaccent
, 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, seperticoca
,cobalt
dan sebagainya, tetapi tidak akan cocok dengan baris yang mengandung katacola
,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
.