16 Contoh Perintah grep untuk Membantu Anda di Dunia Nyata
Diterbitkan: 2021-02-23grep, awalnya dikembangkan untuk sistem berbasis Unix, adalah salah satu utilitas baris perintah yang paling banyak digunakan di kotak Linux.
Namanya berasal dari perintah serupa lainnya di alat ed, yaitu, g/ re / p yang merupakan singkatan dari g secara global mencari ekspresi reguler dan mencetak garis yang cocok. grep pada dasarnya mencari pola tertentu atau ekspresi reguler dari input atau file standar dan mencetak baris yang cocok dengan kriteria yang diberikan. Ini sering digunakan untuk memfilter detail yang tidak perlu saat hanya mencetak informasi yang diperlukan dari file log besar.
Kekuatan ekspresi reguler digabungkan dengan opsi yang didukung di grep memungkinkan hal ini.
Di sini kita akan membahas beberapa perintah grep yang umum digunakan dalam berbagai skenario oleh sysadmin atau pengembang.
Jadi mari kita mulai…
Sintaks Perintah grep
perintah grep mengharapkan pola dan argumen opsional bersama dengan daftar file jika digunakan tanpa pemipaan.
$ grep [options] pattern [files]
Contoh sederhananya adalah:
$ grep my file.txt my_file $
Mencari Banyak File
grep memungkinkan Anda untuk mencari pola yang diberikan tidak hanya dalam satu tetapi banyak file. Inilah cara Anda dapat mencari pola di banyak file dengan menggunakan *
wildcard.
$ sudo grep -i err /var/log/messages*
Keluaran:
$ sudo grep err /var/log/messages* /var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: Using IOAPIC for interrupt routing /var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11) /var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11) /var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11) /var/log/messages:Dec 28 10:36:52 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11) /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: Using IOAPIC for interrupt routing /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11) /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11) /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11) /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11) /var/log/messages-20201225:Dec 23 23:01:00 centos7vm kernel: BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter. /var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11) /var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11) /var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11) /var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11) /var/log/messages-20201227:Dec 27 19:11:18 centos7vm kernel: BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter. /var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel: [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message. /var/log/messages-20201227:Dec 27 19:11:21 centos7vm kernel: [drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message. $
Anda dapat mengamati dari output di atas bahwa nama file dicetak terlebih dahulu sebelum mencetak garis yang cocok untuk menunjukkan di mana grep
menemukan pola yang diberikan.
Pencarian Tidak Peka Huruf Besar
grep menawarkan untuk mencari pola tanpa melihat case dari pola tersebut. Gunakan flag -i
untuk memberi tahu grep untuk mengabaikan huruf besar-kecil.
$ grep -i [pattern] [file]
Keluaran:
$ grep -i it text_file.txt This is a sample text file. It contains functionality. You can always use grep with any kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $
Pencarian Kata Utuh
Tidak selalu kami menginginkan kecocokan sebagian tetapi sebaliknya mengharapkan grep untuk mencocokkan kata yang lengkap saja. Anda dapat melakukannya dengan -w
bendera.
$ grep -w [pattern] [file]
Keluaran:
$ grep -w is text_file.txt This is a sample text file. It contains This is a sample text file. It's repeated two times. $
Periksa Jumlah Pertandingan
Terkadang alih-alih garis pencocokan yang sebenarnya, kita hanya perlu menghitung pencocokan sukses yang dibuat oleh grep. Kita bisa mendapatkan hitungan ini menggunakan opsi -c
.
$ grep -c [pattern] [file]
Keluaran:
$ grep -c is text_file.txt 2 $
Cari Sub-direktori
Seringkali diperlukan untuk mencari file tidak hanya di direktori kerja saat ini tetapi juga di subdirektori. grep memungkinkan Anda melakukannya dengan mudah dengan flag -r
.
$ grep -r [pattern] *
Keluaran:
$ grep -r Hello * dir1/file1.txt:Hello One dir1/file2.txt:Hello Two dir1/file3.txt:Hello Three $
Seperti yang dapat Anda amati, grep melintasi setiap subdirektori di dalam direktori saat ini dan mencantumkan file dan baris tempat ditemukannya kecocokan.
Pencarian Terbalik
Jika Anda ingin menemukan sesuatu yang tidak cocok dengan pola yang diberikan, grep memungkinkan melakukan hal itu dengan flag -v
.
$ grep -v [pattern] [file]
Keluaran:
$ grep This text_file.txt This is a sample text file. It contains This is a sample text file. It's repeated two times. $ grep -v This text_file.txt several lines to be used as part of testing grep functionality. You can always use grep with any kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. $
Anda dapat membandingkan output dari perintah grep
pada pola dan file yang sama dengan dan tanpa flag -v
. Dengan -v
, baris mana pun yang tidak cocok dengan pola akan dicetak.
Cetak Nomor Baris
grep memungkinkan Anda untuk mencetak nomor baris bersama dengan garis cetak yang memudahkan untuk mengetahui di mana letak baris dalam file. Gunakan opsi -n
seperti yang ditunjukkan untuk mendapatkan nomor baris dalam output.
$ grep -n [pattern] [file]
Keluaran:
$ grep -n This text_file.txt 1:This is a sample text file. It contains 7:This is a sample text file. It's repeated two times. $
Batasi keluaran grep
Untuk file besar seperti log, dll. keluaran grep bisa panjang dan Anda mungkin hanya memerlukan jumlah baris yang tetap dalam keluaran alih-alih mencocokkan semuanya. Kita dapat menggunakan – m[num]
untuk membatasi garis yang dicetak dengan angka. Berikut cara menggunakannya:
$ grep -m[num] [pattern] [file]
Perhatikan bagaimana penggunaan flag -m
memengaruhi keluaran grep untuk rangkaian kondisi yang sama dalam contoh di bawah ini:
$ grep It text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $ grep -m2 It text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as $
Tampilkan Baris Tambahan
Seringkali kita tidak hanya membutuhkan garis yang memiliki pola yang cocok tetapi beberapa garis di atas atau di bawahnya untuk konteks yang lebih baik.

Dimungkinkan untuk mencetak garis di atas atau di bawah (atau keduanya) garis yang memiliki pola menggunakan grep dengan menggunakan flag -A
, -B
atau -C
dengan nilai num
. Di sini num
menunjukkan jumlah garis tambahan yang akan dicetak tepat di atas atau di bawah garis yang cocok. Ini berlaku untuk semua kecocokan yang ditemukan grep dalam file atau daftar file yang ditentukan.
$ grep -A[num] [pattern] [file]
ATAU
$ grep -B[num] [pattern] [file]
ATAU
$ grep -C[num] [pattern] [file]
Output di bawah ini menunjukkan output grep normal serta output dengan flag -A
, -B
dan -C
satu per satu. Perhatikan bagaimana grep menginterpretasikan flag dan nilainya serta perubahan pada output masing-masing. Dengan flag -A1
, grep mencetak 1 baris yang mengikuti tepat setelah baris yang cocok.
Demikian pula, dengan flag -B1
, ia mencetak 1 baris tepat sebelum baris yang cocok. Dengan flag -C1
, ia mencetak 1 baris sebelum dan sesudah baris yang cocok.
$ grep numbers text_file.txt It supports numbers like 1, 2, 3 etc. as well as $ grep -A1 numbers text_file.txt It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. $ grep -B1 numbers text_file.txt kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as $ grep -C1 numbers text_file.txt kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. $
Daftar Nama File
Untuk mencetak hanya nama file di mana pola ditemukan alih-alih garis yang benar-benar cocok, gunakan flag -l
.
$ grep -l [pattern] [file]
Berikut ini contoh lari:
$ grep -l su *.txt file.txt text_file.txt $
Cetak Garis Tepat
Terkadang kita perlu mencetak garis yang sama persis dengan pola yang diberikan, bukan sebagian darinya. grep mengizinkan -x
flag untuk melakukan hal itu.
$ grep -x [pattern] [file]
Dalam contoh di bawah ini, file.txt berisi baris dengan hanya satu kata "dukungan" dan dengan demikian akan dicocokkan dengan grep dengan flag -x
sambil mengabaikan baris yang mungkin berisi kata "dukungan" bersama dengan teks lainnya.
$ grep -x support *.txt file.txt:support $
Cocokkan String Awal
Menggunakan ekspresi reguler, kita dapat menemukan string di awal baris. Inilah cara melakukannya.
$ grep [options] "^[string]" [file]
Contoh:
$ grep It text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $ grep ^It text_file.txt It supports numbers like 1, 2, 3 etc. as well as $
Amati bagaimana menggunakan karakter ^
mengubah output. ^
menunjukkan awal dari string dan grep cocok dengan ^It
sebagai baris apa pun yang dimulai dengan kata It
. Melampirkan tanda kutip dapat membantu ketika pola berisi spasi dll.
Cocokkan String Akhir
Ekspresi reguler umum lainnya yang berguna adalah mencocokkan akhir pola garis.
$ grep [options] "[string]$" [file]
Contoh:
$ grep "\." text_file.txt This is a sample text file. It contains functionality. You can always use grep with any kind of data but it works best with text data. It supports numbers like 1, 2, 3 etc. as well as alphabets and special characters like - + * # etc. This is a sample text file. It's repeated two times. $ grep "\.$" text_file.txt kind of data but it works best with text data. alphabets and special characters like - + * # etc. This is a sample text file. It's repeated two times. $
Kami mencoba mencocokkan file .
karakter di akhir baris. Karena titik (.) adalah karakter dengan arti khusus, kita perlu menghindarinya dengan karakter \
. Sekali lagi perhatikan bagaimana keluaran bervariasi ketika kita hanya mencocokkan .
karakter dan ketika kita menggunakan $
untuk menginstruksikan grep agar hanya cocok dengan baris yang diakhiri dengan .
(bukan yang mungkin mengandungnya di antara keduanya).
Gunakan File Pola
Mungkin ada situasi di mana Anda memiliki daftar pola rumit yang sering Anda gunakan. Alih-alih menuliskannya setiap saat, Anda dapat menentukan daftar pola dalam file dan menggunakan flag -f
. File harus berisi satu pola per baris.
$ grep -f [pattern_file] [file_to_match]
Dalam contoh kami, kami telah membuat nama file pola pattern.txt
dengan konten di bawah ini:
$ cat pattern.txt This It $
Untuk menggunakannya, gunakan flag -f
.
$ grep -f pattern.txt text_file.txt This is a sample text file. It contains It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $
Tentukan Beberapa Pola
grep memungkinkan menentukan beberapa pola menggunakan -e
flag.
$ grep -e [pattern1] -e [pattern2] -e [pattern3]...[file]
Contoh:
$ grep -e is -e It -e to text_file.txt This is a sample text file. It contains several lines to be used as part of testing grep It supports numbers like 1, 2, 3 etc. as well as This is a sample text file. It's repeated two times. $
Tentukan Extended RegEx
grep juga mendukung Extended Regular Expressions atau ERE menggunakan flag -E
. Ini mirip dengan perintah egrep
di Linux.
Menggunakan ERE memiliki keuntungan ketika Anda ingin memperlakukan karakter meta sebagaimana adanya dan tidak ingin menggantinya sebagai string seperti grep. Ini memberi Anda lebih banyak fleksibilitas dalam hal keluar dari mereka seperti yang harus kami lakukan dalam kasus grep. Karena itu, menggunakan -E
dengan grep sama dengan perintah egrep
.
$ grep -E '[Extended RegEx]' [file]
Inilah salah satu penggunaan ERE dimana kita ingin mencetak baris yang tidak dikomentari atau kosong. Ini sangat berguna untuk menemukan sesuatu di file konfigurasi besar. Saya juga menggunakan flag -v
untuk TIDAK mencetak garis yang cocok dengan pola '^(#|$)'
.
$ sudo grep -vE '^(#|$)' /etc/ssh/sshd_config HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key SyslogFacility AUTHPRIV AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication yes ChallengeResponseAuthentication no GSSAPIAuthentication yes GSSAPICleanupCredentials no UsePAM yes X11Forwarding yes AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS Subsystem sftp /usr/libexec/openssh/sftp-server $
Kesimpulan
Contoh di atas hanyalah puncak gunung es. grep mendukung berbagai opsi dan dapat menjadi alat yang sangat berguna di tangan orang yang tahu cara menggunakannya secara efektif. Kita tidak hanya dapat menggunakan contoh yang diberikan di atas tetapi menggabungkannya dengan cara yang berbeda untuk mendapatkan apa yang kita butuhkan.
Lihat halaman manualnya untuk membaca lebih lanjut tentangnya.
$ man grep
Selanjutnya, pelajari contoh perintah SFTP.