Aku ingin berjalan-jalan melalui tentang perbedaan antara grep
, pgrep
, egrep
, dan fgrep
dan bagaimana saya akan menggunakannya.
linux
command-line
grep
Eric Leschinski
sumber
sumber
Jawaban:
Perbedaan antara grep, pgrep, egrep, dan fgrep (Linux):
grep
grep adalah akronim yang merupakan kependekan dari "Global Regular Expressions Print". grep adalah program yang memindai file tertentu atau file per baris, mengembalikan baris yang berisi pola. Pola adalah ekspresi yang menentukan serangkaian string dengan menafsirkan karakter sebagai meta-karakter. Misalnya karakter meta tanda bintang (*) ditafsirkan sebagai makna "nol atau lebih dari elemen sebelumnya". Ini memungkinkan pengguna untuk mengetik serangkaian karakter pendek dan karakter meta ke dalam perintah grep agar komputer menunjukkan kepada kita baris apa yang cocok dengan file.
Perintah grep standar terlihat seperti:
grep mencetak hasil pencarian ke layar (stdout) dan mengembalikan nilai keluar berikut:
Beberapa flag umum adalah:
-c
untuk menghitung jumlah kecocokan yang berhasil dan tidak mencetak kecocokan yang sebenarnya,-i
untuk membuat case pencarian tidak sensitif,-n
untuk mencetak nomor baris sebelum setiap print cocok,-v
untuk mengambil pelengkap dari ekspresi reguler (yaitu mengembalikan garis yang tidak cocok), dan-l
untuk mencetak nama file file dengan garis yang cocok dengan ekspresi.egrep
egrep adalah akronim yang merupakan singkatan dari "Extended Global Regular Expressions Print".
'E' dalam egrep berarti memperlakukan pola sebagai ekspresi reguler. "Extended Regular Expressions" disingkat 'ERE' diaktifkan di egrep. egrep (yang sama dengan
grep -E
) memperlakukan+
,?
,|
,(
, dan)
sebagai meta-karakter.Dalam ekspresi reguler dasar (dengan grep), meta-karakter
?
,+
,{
,|
,(
, dan)
kehilangan makna khusus mereka. Jika Anda ingin grep untuk mengobati karakter ini sebagai meta-karakter, melarikan diri mereka\?
,\+
,\{
,\|
,\(
, dan\)
.Misalnya, di sini grep menggunakan persamaan reguler dasar di mana plus diperlakukan secara literal, setiap baris dengan plus di dalamnya dikembalikan.
egrep di sisi lain memperlakukan "+" sebagai karakter meta dan mengembalikan setiap baris karena plus ditafsirkan sebagai "satu atau lebih kali".
Di sini setiap baris dikembalikan karena
+
diperlakukan oleh egrep sebagai karakter meta. grep normal akan mencari hanya baris dengan literal+
.fgrep
fgrep adalah singkatan dari "Fixed-string Global Regular Expressions Print".
fgrep (yang sama dengan grep -F) adalah tetap atau cepat grep dan berperilaku sebagai grep tetapi TIDAK mengenali meta-karakter ekspresi reguler sebagai istimewa. Pencarian akan selesai lebih cepat karena hanya memproses string sederhana daripada pola yang rumit.
Misalnya, jika saya ingin mencari .bash_profile saya untuk titik literal (.) Maka menggunakan grep akan sulit karena saya harus melarikan diri dari titik karena titik adalah karakter meta yang berarti 'wild-card, sembarang karakter tunggal':
Perintah di atas mengembalikan setiap baris myfile.txt. Lakukan ini sebagai gantinya:
Maka hanya garis-garis yang memiliki literal '.' di dalamnya dikembalikan. fgrep membantu kita tidak repot-repot keluar dari karakter meta kita.
pgrep
pgrep adalah akronim yang merupakan singkatan dari "Process-ID Global Regular Expressions Print".
pgrep melihat melalui proses yang sedang berjalan dan mencantumkan ID proses yang cocok dengan kriteria seleksi untuk stdout. pgrep sangat berguna ketika semua yang ingin Anda ketahui adalah proses id integer dari suatu proses. Misalnya, jika saya hanya ingin mengetahui ID proses dari proses mysql saya, saya akan menggunakan perintah
pgrep mysql
yang akan mengembalikan ID proses seperti 7312.sumber
pgrep
manual : Nama proses yang digunakan untuk pencocokan terbatas pada 15 karakter yang ada di output dari / proc / pid / stat . Gunakan opsi -f untuk mencocokkan dengan baris perintah lengkap, / proc / pid / cmdline .