Linux dan sistem mirip UNIX, semua informasi konfigurasi sistem disimpan dan dimanipulasi dalam bentuk teks biasa. Jadi mencari teks akan menjadi tugas yang sangat umum untuk mengedit dan analisis log.
Perintah grep memungkinkan pencarian teks atau string dalam file atau dari konsol keluaran suatu perintah, untuk istilah atau pola yang cocok dengan ekspresi reguler. Ketika grep menemukan kecocokan dalam satu baris, grep akan menyalin hasil ke layar yaitu stdout.
Dalam tutorial ini kita belajar bagaimana menggunakan perintah grep dengan contoh-contoh praktis.
Perintah Grep
Mari kita periksa sintaks perintah grep sebelum kita mulai menjelaskan penggunaannya.
grep [OPTIONS] PATTERN [FILE...]
Kami akan membahas secara rinci opsi dan pola grep paling umum yang dapat kami gunakan untuk pencarian.
Cara mencari string dalam file
Pada contoh di bawah ini grep mencari file /etc/passwd untuk string 'root' dan mengarahkan output ke stdout.
$ grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
Telusuri teks dari beberapa file
Anda dapat mencari teks tertentu dari beberapa file menggunakan perintah berikut:
$ grep "root" /etc/passwd /etc/group
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/group:root:x:0:root
/etc/group:bin:x:1:root,bin,daemon
/etc/group:daemon:x:2:root,bin,daemon
/etc/group:sys:x:3:root,bin,adm
/etc/group:adm:x:4:root,adm,daemon
/etc/group:disk:x:6:root
/etc/group:wheel:x:10:root
Penelusuran tidak peka huruf besar-kecil
Opsi -i
mencari kasus string/pola yang diberikan secara tidak sensitif.
Dalam contoh berikut grep cocok dengan semua kata seperti “hal”, “HAL” case insensitive:
$ grep -i HAL /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
Penelusuran Rekursif
Pencarian rekursif dicapai dengan menggunakan -r
opsi yang akan mencari secara rekursif semua tautan simbolik melewatkan file. Jika Anda ingin memasukkan symlink, gunakan -R
.
Pada contoh berikut, perintah grep akan mencari string 'ngnix' di semua file di dalam /var
direktori.
$ grep -r nginx /var
Mencari String di Command Output (stdout)
Anda dapat menggunakan pipa output untuk perintah dan grep untuk pola dari outputnya.
Pada contoh berikut saya mencari file dengan nama 'backup' menggunakan perintah ls
$ ls | grep backup
Di sini saya melakukan banyak pipa dan mencari proses 'docker' dan 'apache' dari perintah ps.
$ ps -ef | grep docker | grep apache
Ekspresi Reguler dalam file
Ekspresi Reguler adalah pola yang cocok untuk setiap baris input. Basic dan Extended adalah dua ekspresi reguler yang digunakan oleh perintah grep.
Ekspresi reguler dasar
Secara default, grep menafsirkan pola sebagai ekspresi reguler dasar.
Simbol ^ (tanda sisipan) - Pola yang mengikutinya harus muncul di awal setiap baris. Dalam contoh berikut, string ^welcome hanya akan cocok jika muncul di awal baris.
$ grep “^welcome” filename
Ekspresi Reguler Diperpanjang
Gunakan -E
( atau --extended-regexp) jika Anda ingin grep memahaminya sebagai ekspresi reguler yang diperluas.
Perintah berikut akan mengekstrak semua tautan dari sebuah file
$ grep –Eoi '<a[^>]+>.*</a>' filename
o
:Secara default, grep mencetak seluruh baris yang berisi pola pencarian. Opsi ini menginstruksikan perintah grep untuk mencetak hanya kata-kata yang cocok, bukan seluruh baris.
i
:Opsi ini meminta perintah grep untuk mengabaikan huruf besar/kecil saat mencocokkan pola.
Telusuri kata lengkap menggunakan grep
-w
(word-regexp) flag untuk grep akan membuat ekspresi yang diberikan hanya cocok dengan seluruh kata.
$ grep -iw "samba" /etc/samba/smb.conf
# This is the main Samba configuration file. You should read the
# here. Samba has a huge number of configurable options (perhaps too
# For a step to step guide on installing, configuring and using samba,
# read the Samba-HOWTO-Collection. This may be obtained from:
Menampilkan garis setelah string cocok
-A
opsi yang menampilkan N
baris setelah string cocok.
$ grep -A 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
Menampilkan garis sebelum string cocok
Kita bisa menggunakan -B
opsi untuk menampilkan N baris sebelum string untuk file tertentu
$ grep -B 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
--
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
Telusuri beberapa string
Kita dapat mencari beberapa pola atau string menggunakan operator OR |
dan \|
. -E
(extended-regexp) mengontrol apakah Anda perlu keluar dari karakter khusus tertentu. -e
benar-benar bendera untuk menunjukkan pola yang ingin Anda cocokkan.
Contoh 1:menggunakan opsi -E
$ ls | grep -E “li|ovo”
linux24
ovo8_linux24.sh
Atau
$ grep -E "foo|bar" *.txt
Contoh 2:tanpa -E
$ ls | grep ‘li\|ovo’
linux24
ovo8_linux24.sh
Atau
$ grep "foo\|soul\|bar" *.txt
Kecualikan file tertentu dari pencarian
Anda dapat menggunakan opsi -v untuk mengabaikan pencarian. Perintah berikut akan mencari string 'error' di semua file kecuali 'syslog.log'
$ grep -r error * | grep -v ‘/\syslog.log/’
Kesimpulan
Dalam tutorial ini kita belajar bagaimana menggunakan perintah grep untuk menemukan teks dalam file. Saya harap Anda menikmati membaca ini dan silakan tinggalkan saran Anda di bagian komentar di bawah.