grep
command singkatan dari “global regular expression print”, dan merupakan salah satu perintah yang paling kuat dan umum digunakan di Linux.
grep
mencari satu atau lebih file input untuk baris yang cocok dengan pola tertentu dan menulis setiap baris yang cocok ke output standar. Jika tidak ada file yang ditentukan, grep
membaca dari input standar, yang biasanya merupakan output dari perintah lain.
Pada artikel ini, kami akan menunjukkan cara menggunakan grep
perintah melalui contoh-contoh praktis dan penjelasan rinci tentang grep
GNU yang paling umum pilihan.
grep
Sintaks Perintah #
Sintaks untuk grep
perintahnya adalah sebagai berikut:
grep [OPTIONS] PATTERN [FILE...]
Item dalam tanda kurung siku adalah opsional.
OPTIONS
- Nol atau lebih banyak pilihan. Grep menyertakan sejumlah opsi yang mengontrol perilakunya.PATTERN
- Pola pencarian.FILE
- Nol atau lebih nama file masukan.
Untuk dapat mencari file, pengguna yang menjalankan perintah harus memiliki akses baca ke file.
Mencari String di File #
Penggunaan paling dasar dari grep
perintahnya adalah untuk mencari string (teks) dalam sebuah file.
Misalnya, untuk menampilkan semua baris yang berisi string bash
dari /etc/passwd
file, Anda akan menjalankan perintah berikut:
grep bash /etc/passwd
Outputnya akan terlihat seperti ini:
root:x:0:0:root:/root:/bin/bash
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Jika string menyertakan spasi, Anda harus mengapitnya dalam tanda kutip tunggal atau ganda:
grep "Gnome Display Manager" /etc/passwd
Balikkan Pencocokan (Kecualikan) #
Untuk menampilkan garis yang tidak cocok dengan pola, gunakan -v
( atau --invert-match
) pilihan.
Misalnya untuk mencetak baris yang tidak mengandung string nologin
Anda akan menggunakan:
grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash
colord:x:124:124::/var/lib/colord:/bin/false
git:x:994:994:git daemon user:/:/usr/bin/git-shell
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Menggunakan Grep untuk Memfilter Output dari Perintah #
Keluaran perintah dapat difilter dengan grep
melalui pemipaan, dan hanya garis yang cocok dengan pola tertentu yang akan dicetak pada terminal.
Misalnya, untuk mengetahui proses mana yang berjalan di sistem Anda sebagai pengguna www-data
anda dapat menggunakan ps
berikut ini perintah:
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 menyambungkan beberapa pipa sesuai perintah. Seperti yang Anda lihat pada output di atas, ada juga baris yang berisi grep
proses. Jika Anda tidak ingin baris itu ditampilkan, berikan output ke grep
lain contoh 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
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
Penelusuran Rekursif #
Untuk mencari pola secara rekursif, panggil grep
dengan -r
opsi (atau --recursive
). Saat opsi ini digunakan grep
akan menelusuri semua file di direktori yang ditentukan, melewatkan symlink yang ditemui secara rekursif.
Untuk mengikuti semua tautan simbolik, alih-alih -r
, gunakan -R
opsi (atau --dereference-recursive
).
Berikut adalah contoh yang menunjukkan cara mencari string linuxize.com
di semua file di dalam /etc
direktori:
grep -r linuxize.com /etc
Outputnya akan menyertakan baris yang cocok yang diawali dengan path lengkap ke file:
/etc/hosts:127.0.0.1 node2.linuxize.com
/etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;
Jika Anda menggunakan -R
opsi, grep
akan mengikuti semua tautan simbolik:
grep -R linuxize.com /etc
Perhatikan baris terakhir dari output di bawah ini. Baris itu tidak dicetak ketika grep
dipanggil dengan -r
karena file di dalam sites-enabled
Ng Nginx direktori adalah symlink ke file konfigurasi di dalam sites-available
direktori.
/etc/hosts:127.0.0.1 node2.linuxize.com
/etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;
/etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;
Hanya Tampilkan Nama File #
Untuk menekan grep
default default output dan cetak hanya nama file yang berisi pola yang cocok, gunakan -l
( atau --files-with-matches
) pilihan.
Perintah di bawah mencari semua file yang diakhiri dengan .conf
di direktori kerja saat inidan hanya mencetak nama file yang berisi string linuxize.com
:
grep -l linuxize.com *.conf
Outputnya akan terlihat seperti ini:
tmux.conf
haproxy.conf
-l
opsi biasanya digunakan dalam kombinasi dengan opsi rekursif -R
:
grep -Rl linuxize.com /tmp
Penelusuran Tidak Peka Huruf Besar #
Secara default, grep
peka huruf besar/kecil. Ini berarti bahwa karakter huruf besar dan kecil diperlakukan berbeda.
Untuk mengabaikan huruf besar/kecil saat mencari, aktifkan grep
dengan -i
opsi (atau --ignore-case
).
Misalnya, saat menelusuri Zebra
tanpa opsi apa pun, perintah berikut tidak akan menampilkan output apa pun, yaitu ada baris yang cocok:
grep Zebra /usr/share/words
Tetapi jika Anda melakukan pencarian peka huruf besar/kecil menggunakan -i
pilihan, itu akan cocok dengan huruf besar dan kecil:
grep -i Zebra /usr/share/words
Menentukan “Zebra” akan cocok dengan “zebra”, “ZEbrA” atau kombinasi huruf besar dan kecil lainnya untuk string tersebut.
zebra
zebra's
zebras
Cari Kata Lengkap #
Saat mencari string, grep
akan menampilkan semua baris tempat string disematkan dalam string yang lebih besar.
Misalnya, jika Anda mencari "gnu", semua baris di mana "gnu" disematkan dalam kata yang lebih besar, seperti "cygnus" atau "magnum" akan dicocokkan:
grep gnu /usr/share/words
cygnus
gnu
interregnum
lgnu9d
lignum
magnum
magnuson
sphagnum
wingnut
Untuk mengembalikan hanya baris di mana string yang ditentukan adalah seluruh kata (diapit oleh karakter non-kata), gunakan -w
( atau --word-regexp
) pilihan.
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 -w
opsi, grep
perintah hanya akan mengembalikan baris di mana gnu
disertakan sebagai kata terpisah.
grep -w gnu /usr/share/words
gnu
Tampilkan Nomor Baris #
-n
( atau --line-number
) opsi memberitahu grep
untuk menunjukkan nomor baris dari baris yang berisi string yang cocok dengan pola. Saat opsi ini digunakan, grep
mencetak kecocokan dengan keluaran standar yang diawali dengan nomor baris.
Misalnya untuk menampilkan baris dari /etc/services
file yang berisi string bash
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
Hitung Kecocokan #
Untuk mencetak jumlah baris yang cocok ke keluaran standar, gunakan -c
( atau --count
) pilihan.
Pada contoh di bawah, kami menghitung jumlah akun yang memiliki /usr/bin/zsh
sebagai cangkang.
regular expression
grep -c '/usr/bin/zsh' /etc/passwd
4
Mode Senyap #
-q
(atau --quiet
) memberitahu grep
untuk berjalan dalam mode senyap untuk tidak menampilkan apa pun pada output standar. Jika kecocokan ditemukan, perintah keluar dengan status 0
. Ini berguna saat menggunakan grep
dalam skrip shell tempat Anda ingin memeriksa apakah file berisi string dan melakukan tindakan tertentu tergantung pada hasilnya.
Berikut adalah contoh penggunaan grep
dalam mode senyap sebagai perintah uji dalam if
pernyataan:
if grep -q PATTERN filename
then
echo pattern found
else
echo pattern not found
fi
Ekspresi Reguler Dasar #
GNU Grep memiliki tiga set fitur ekspresi reguler, Basic, Extended dan Perl-compatible.
Secara default, grep
menginterpretasikan pola sebagai ekspresi reguler dasar di mana semua karakter kecuali karakter meta sebenarnya adalah ekspresi reguler yang cocok dengan dirinya sendiri.
Di bawah ini adalah daftar meta-karakter yang paling umum digunakan:
-
Gunakan
^
(caret) simbol untuk mencocokkan ekspresi di awal baris. Pada contoh berikut, stringkangaroo
akan cocok hanya jika itu terjadi di awal baris.grep "^kangaroo" file.txt
-
Gunakan
$
(dolar) simbol untuk mencocokkan ekspresi di akhir baris. Pada contoh berikut, stringkangaroo
akan cocok hanya jika itu terjadi di akhir baris.grep "kangaroo$" file.txt
-
Gunakan
.
(titik) simbol untuk mencocokkan setiap karakter tunggal. Misalnya, untuk mencocokkan apa pun yang dimulai dengankan
kemudian memiliki dua karakter dan diakhiri dengan stringroo
, Anda dapat menggunakan pola berikut:grep "kan..roo" file.txt
-
Gunakan
[ ]
(tanda kurung) untuk mencocokkan karakter tunggal apa pun yang diapit tanda kurung. Misalnya, temukan baris yang berisiaccept
atau “accent
, Anda dapat menggunakan pola berikut:grep "acce[np]t" file.txt
-
Gunakan
[^ ]
untuk mencocokkan karakter tunggal apa pun yang tidak terlampir dalam tanda kurung. Pola berikut akan cocok dengan kombinasi string apa pun yang berisico(any_letter_except_l)a
, seperticoca
,cobalt
dan seterusnya, tetapi tidak akan cocok dengan baris yang berisicola
,grep "co[^l]a" file.txt
Untuk menghindari arti khusus dari karakter berikutnya, gunakan \
(garis miring terbalik).
Extended Regular Expressions #
Untuk menafsirkan pola sebagai ekspresi reguler yang diperluas, gunakan -E
( atau --extended-regexp
) pilihan. Ekspresi reguler yang diperluas mencakup semua meta-karakter dasar, bersama dengan meta-karakter tambahan untuk membuat pola pencarian yang lebih kompleks dan kuat. Berikut adalah beberapa contohnya:
-
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
-o
opsi digunakan untuk mencetak hanya string yang cocok.
Telusuri Beberapa String (Pola) #
Dua atau lebih pola pencarian dapat digabungkan menggunakan operator ATAU |
.
Secara default, grep
menginterpretasikan pola sebagai ekspresi reguler dasar di mana meta-karakter seperti |
kehilangan arti khususnya, dan versi garis miring terbaliknya harus digunakan.
Pada contoh di bawah ini kami mencari semua kemunculan kata fatal
, error
, dan critical
dalam file kesalahan log Nginx:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
Jika Anda menggunakan opsi ekspresi reguler yang diperluas -E
, lalu operator |
tidak boleh diloloskan, seperti yang ditunjukkan di bawah ini:
grep -E 'fatal|error|critical' /var/log/nginx/error.log
Cetak Garis Sebelum Pertandingan #
Untuk mencetak sejumlah baris tertentu sebelum mencocokkan baris, gunakan -B
( atau --before-context
) pilihan.
Misalnya, untuk menampilkan lima baris konteks awal sebelum mencocokkan baris, Anda dapat menggunakan perintah berikut:
grep -B 5 root /etc/passwd
Cetak Garis Setelah Pertandingan #
Untuk mencetak sejumlah baris tertentu setelah mencocokkan baris, gunakan -A
( atau --after-context
) pilihan.
Misalnya, untuk menampilkan lima baris konteks tambahan setelah baris yang cocok, Anda akan menggunakan perintah berikut:
grep -A 5 root /etc/passwd
Kesimpulan #
grep
perintah memungkinkan Anda untuk mencari pola di dalam file. Jika kecocokan ditemukan, grep mencetak baris yang berisi pola yang ditentukan.
Masih banyak lagi yang bisa dipelajari tentang Grep di Halaman Manual Pengguna Grep.
Jika Anda memiliki pertanyaan atau masukan, jangan ragu untuk memberikan komentar.