grep, awalnya dikembangkan untuk sistem berbasis Unix, adalah salah satu utilitas baris perintah yang paling banyak digunakan di kotak Linux.
Namanya berasal dari perintah serupa lain di alat ed, yaitu, g / re / p yang merupakan singkatan g lobally mencari re ekspresi gular dan p garis etak cocok. grep pada dasarnya mencari pola atau ekspresi reguler yang diberikan dari input atau file standar dan mencetak baris yang cocok dengan kriteria yang diberikan. Ini sering digunakan untuk menyaring detail yang tidak perlu saat mencetak hanya informasi yang diperlukan dari file log besar.
Kekuatan ekspresi reguler digabungkan dengan opsi yang didukung di grep memungkinkan ini.
Di sini kita akan membahas beberapa perintah grep yang umum digunakan dalam skenario yang berbeda oleh sysadmin atau pengembang.
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
$
#1. Mencari Banyak File
grep memungkinkan Anda untuk mencari pola yang diberikan tidak hanya dalam satu tetapi beberapa 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 baris yang cocok untuk menunjukkan di mana grepditemukan pola yang diberikan.
#2. Pencarian Huruf Tidak Peka
grep menawarkan untuk mencari sebuah pola tanpa melihat kasus dari pola tersebut. Gunakan -iflag untuk memberi tahu grep agar mengabaikan case.
$ 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.
$
#3. Pencarian Kata Utuh
Kami tidak selalu menginginkan kecocokan sebagian, tetapi mengharapkan grep untuk mencocokkan kata yang lengkap saja. Anda dapat melakukannya dengan -wbendera.
$ 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.
$
#4. Periksa Hitungan Pertandingan
Terkadang alih-alih garis yang cocok, kita hanya perlu menghitung kecocokan sukses yang dibuat grep. Kita bisa mendapatkan jumlah ini menggunakan -copsi.
$ grep -c [pattern] [file]
Keluaran :
$ grep -c is text_file.txt
2
$
#5. 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 -rflag.
$ grep -r [pattern] *
Keluaran :
$ grep -r Hello *
dir1/file1.txt:Hello One
dir1/file2.txt:Hello Two
dir1/file3.txt:Hello Three
$
Seperti yang Anda amati, grep melintasi setiap subdirektori di dalam direktori saat ini dan mencantumkan file dan baris tempat kecocokan ditemukan.
#6. Pencarian Terbalik
Jika Anda ingin menemukan sesuatu yang tidak cocok dengan pola yang diberikan, grep memungkinkan melakukan hal itu dengan -vflag.
$ 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 grepperintah pada pola dan file yang sama dengan dan tanpa -vflag. Dengan -v, garis mana pun yang tidak cocok dengan pola akan dicetak.
#7. Cetak Nomor Baris
grep memungkinkan Anda untuk mencetak nomor baris bersama dengan baris tercetak yang memudahkan untuk mengetahui di mana baris berada dalam file. Gunakan -nopsi 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.
$
#8. Batasi keluaran grep
Untuk file besar seperti log, dll. keluaran grep bisa panjang dan Anda mungkin hanya perlu sejumlah baris tetap dalam keluaran alih-alih mencocokkan semuanya. Kita dapat menggunakan – m[num]untuk membatasi garis yang dicetak dengan num. Berikut cara menggunakannya:
$ grep -m[num] [pattern] [file]
Perhatikan bagaimana penggunaan -mflag mempengaruhi output grep untuk rangkaian kondisi yang sama pada 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
$
#9. Tampilkan Garis 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 -A, -Batau -Cbendera dengan numnilai. Di sini nummenunjukkan jumlah baris tambahan yang akan dicetak yang tepat di atas atau di bawah garis yang cocok. Ini berlaku untuk semua kecocokan yang ditemukan grep di 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, -Bdan -Csatu per satu. Perhatikan bagaimana grep menginterpretasikan flag dan nilainya serta perubahan pada masing-masing output. Dengan -A1flag, grep mencetak 1 baris yang mengikuti tepat setelah baris yang cocok.
Demikian pula, dengan -B1bendera, ia mencetak 1 baris tepat sebelum baris yang cocok. Dengan -C1bendera, ia mencetak 1 baris yang 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.
$
#10. Daftar Nama File
Untuk mencetak hanya nama file tempat pola ditemukan alih-alih garis yang benar-benar cocok, gunakan -lflag.
$ grep -l [pattern] [file]
Berikut ini contoh lari:
$ grep -l su *.txt
file.txt
text_file.txt
$
>_ Sekian kalo ada salah mohon dikoreksi