Nama grep berasal dari perintah ed (dan vim) "g/re/p", yang berarti secara global mencari ekspresi reguler yang diberikan dan mencetak (menampilkan) output.
Reguler Ekspresi
Utilitas memungkinkan pengguna untuk mencari file teks untuk baris yang cocok dengan ekspresi reguler (regexp). Ekspresi reguler adalah string pencarian yang terdiri dari teks dan satu atau lebih dari 11 karakter khusus. Contoh sederhana adalah mencocokkan awal baris.
Contoh File
Bentuk dasar dari grep dapat digunakan untuk menemukan teks sederhana dalam file atau file tertentu particular. Untuk mencoba contohnya, buat file sampel terlebih dahulu.
Gunakan editor seperti nano atau vim untuk menyalin teks di bawah ini ke dalam file bernama file saya.
xyzxyzde
exyzd
dexyz
d?gxyz
xxx
xzz
x\z
x*z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz
Meskipun Anda dapat menyalin dan menempelkan contoh dalam teks (perhatikan bahwa tanda kutip ganda mungkin tidak dapat disalin dengan benar), perintah perlu diketik untuk mempelajarinya dengan benar.
Sebelum mencoba contoh, lihat file contoh:
$cat myfile
Pencarian Sederhana
Untuk menemukan teks 'xyz' di dalam file, jalankan perintah berikut:
$ grep xyz file saya
Menggunakan Warna
Untuk menampilkan warna, gunakan -color (tanda hubung ganda) atau cukup buat alias. Sebagai contoh:
$ grep --warna xyz myfileatau
$ alias grep='grep --color'$ grep xyz file saya
Pilihan
Opsi umum yang digunakan dengan grep perintah meliputi:
- -saya menemukan semua baris terlepas dari kasus
- -c menghitung berapa banyak baris yang berisi teks?
- -n garis tampilan angka dari garis yang cocok
- -l hanya menampilkan mengajukan nama pertandingan itu
- -r rekursif pencarian sub-direktori
- -v temukan semua baris TIDAK berisi teks
Sebagai contoh:
$ grep -i xyz myfile # temukan teks terlepas dari huruf besar/kecil$ grep -ic xyz myfile # menghitung baris dengan teks
$ grep -in xyz myfile # tampilkan nomor baris
Buat Banyak File
Sebelum mencoba mencari banyak file, buat dulu beberapa file baru:
$ echo xyz>filesaya1$ echo -e “xyz\nxzz\nXYZ”>filesaya2
$ echo -e “xxx\nyyy">myfile3
$cat myfile1
$cat myfile2
$cat myfile3
Cari Banyak File
Untuk mencari beberapa file menggunakan nama file atau wildcard, masukkan:
$ grep -ic xyz myfile myfile1 myfile2 myfile3$ grep -di xyz saya*
# cocokkan nama file yang dimulai dengan 'saya'
Latihan I
- Hitung dulu berapa banyak baris yang ada di file /etc/passwd.
- Sekarang temukan semua kemunculan teks var dalam file /etc/passwd.
- Temukan berapa banyak baris dalam file yang berisi teks
- Temukan berapa banyak baris yang TIDAK mengandung teks var.
- Temukan entri untuk login Anda di /etc/passwd
Solusi latihan dapat ditemukan di akhir artikel ini.
Menggunakan Ekspresi Reguler
Perintah grep juga dapat digunakan dengan ekspresi reguler dengan menggunakan satu atau lebih dari sebelas karakter atau simbol khusus untuk mempersempit pencarian. Ekspresi reguler adalah string karakter yang menyertakan karakter khusus untuk memungkinkan pencocokan pola dalam utilitas seperti grep, vim dan sed. Perhatikan bahwa string mungkin perlu diapit dalam tanda kutip.
Karakter khusus yang tersedia meliputi:
^ | Awal dari sebuah garis |
$ | Akhir dari sebuah baris |
. | Karakter apa pun (kecuali \n baris baru) |
* | 0 atau lebih ekspresi sebelumnya previous |
\ | Mendahului simbol membuatnya menjadi karakter literal |
Perhatikan bahwa *, yang dapat digunakan pada baris perintah untuk mencocokkan sejumlah karakter termasuk tidak ada, adalah tidak digunakan dengan cara yang sama di sini.
Perhatikan juga penggunaan tanda kutip dalam contoh berikut.
Contoh
Untuk menemukan semua baris yang dimulai dengan teks menggunakan karakter ^:
$ grep '^xyz' file sayaUntuk menemukan semua baris yang diakhiri dengan teks menggunakan karakter $:
$ grep 'xyz$' file sayaUntuk menemukan baris yang berisi string menggunakan karakter ^ dan $:
$ grep '^xyz$' file sayaUntuk mencari garis menggunakan . untuk mencocokkan karakter apa pun:
$ grep '^x.z'file saya
Untuk menemukan garis menggunakan * untuk mencocokkan 0 atau lebih dari ekspresi sebelumnya:
$ grep '^xy*z' file sayaUntuk mencari garis menggunakan .* untuk mencocokkan 0 atau lebih karakter apa pun:
$ grep '^x.*z' file sayaUntuk mencari garis menggunakan \ untuk keluar dari karakter *:
$ grep '^x\*z' file sayaUntuk menemukan \ karakter gunakan:
$ grep '\\' file saya
Ekspresi grep - egrep
Itu grep perintah hanya mendukung sebagian dari ekspresi reguler yang tersedia. Namun, perintah egrep:
- memungkinkan penggunaan penuh semua ekspresi reguler
- dapat secara bersamaan mencari lebih dari satu ekspresi
Perhatikan bahwa ekspresi harus diapit oleh sepasang tanda kutip.
Untuk menggunakan warna, gunakan -warna atau buat lagi alias:
$ alias egrep='egrep --color'Untuk mencari lebih dari satu ekspresi reguler itu egrep perintah dapat ditulis lebih dari beberapa baris. Namun, ini juga dapat dilakukan dengan menggunakan karakter khusus ini:
| | Bergantian, salah satu atau yang lain |
(… ) | Pengelompokan logis dari bagian ekspresi |
Ini mengekstrak baris yang dimulai dengan root, uucp atau mail dari file, | simbol yang berarti salah satu opsi.
Perintah berikut akan tidak berfungsi, meskipun tidak ada pesan yang ditampilkan, karena dasarnya grep perintah tidak mendukung semua ekspresi reguler:
$ grep '(^root|^uucp|^mail)' /etc/passwdNamun, pada sebagian besar sistem Linux perintah grep -E sama dengan menggunakan egrep:
$ grep -E '(^root|^uucp|^mail)' /etc/passwd
Menggunakan Filter
Perpipaan adalah proses mengirimkan output dari satu perintah sebagai input ke perintah lain dan merupakan salah satu alat Linux paling kuat yang tersedia.
Perintah yang muncul dalam pipa sering disebut sebagai filter karena dalam banyak kasus mereka menyaring atau memodifikasi input yang diteruskan ke mereka sebelum mengirim aliran yang dimodifikasi ke output standar.
Dalam contoh berikut, keluaran standar dari ls -l dilewatkan sebagai input standar ke grep perintah. Keluaran dari grep perintah kemudian diteruskan sebagai input ke lebih perintah.
Ini hanya akan menampilkan direktori di /etc:
$ ls -l /etc|grep '^d'|more
Perintah berikut adalah contoh penggunaan filter:
$ ps -ef|grep cron$ who|grep kdm
Contoh File
Untuk mencoba latihan review, pertama buat file contoh berikut sample.
Gunakan editor seperti nano atau vim untuk menyalin teks di bawah ini ke dalam file bernama orang-orang:
Pribadi J.Smith 25000Pribadi E.Smith 25400
Pelatihan A.Coklat 27500
Pelatihan C.Brown 23400
(Admin) R.Perunggu 30500
Barang habis T.Smyth 30000
Pribadi F.Jones 25000
pelatihan* C.Evans 25500
Barang habis W.Paus 30400
Lantai dasar T.Smythe 30500
Pribadi J.Pria 33000
Latihan II
- Menampilkan file orang-orang dan periksa isinya.
- Temukan semua baris yang berisi string Smith dalam file orang.Petunjuk: gunakan perintah grep tetapi ingat bahwa secara default, ini peka huruf besar-kecil.
- Buat file baru, npeople, berisi semua baris yang dimulai dengan string Pribadi dalam file orang.Petunjuk: gunakan perintah grep dengan >.
- Konfirmasikan isi file npeople dengan membuat daftar file.
- Sekarang tambahkan semua baris di mana teks berakhir dengan string 500 dalam file people ke file npeople.Petunjuk: gunakan perintah grep dengan >>.
- Sekali lagi, konfirmasikan isi file npeople dengan membuat daftar file.
- Temukan Alamat IP server yang disimpan dalam file /etc/hosts.Petunjuk: gunakan perintah grep dengan $(hostname)
- Menggunakan egrep untuk mengekstrak dari /etc/passwd file baris akun yang berisi lp atau milikmu sendiri identitas pengguna.
Solusi latihan dapat ditemukan di akhir artikel ini.
Lebih Banyak Ekspresi Reguler
Ekspresi reguler dapat dianggap sebagai wildcard pada steroid.
Ada sebelas karakter dengan arti khusus: kurung siku pembuka dan penutup [ ], garis miring terbalik \, tanda sisipan ^, tanda dolar $, titik atau titik ., simbol batang atau pipa vertikal |, tanda tanya ?, tanda bintang atau bintang *, tanda plus + dan tanda kurung buka dan tutup . Karakter khusus ini juga sering disebut metakarakter.
Berikut adalah set lengkap karakter khusus:
^ | Awal dari sebuah garis |
$ | Akhir dari sebuah baris |
. | Karakter apa pun (kecuali \n baris baru) |
* | 0 atau lebih ekspresi sebelumnya previous |
| | Bergantian, salah satu atau yang lain |
[… ] | Kumpulan karakter eksplisit untuk dicocokkan |
+ | 1 atau lebih ekspresi sebelumnya |
? | 0 atau 1 dari ekspresi sebelumnya |
\ | Mendahului simbol membuatnya menjadi karakter literal |
… | Notasi quantifier eksplisit |
(… ) | Pengelompokan logis dari bagian ekspresi |
Versi default dari grep hanya memiliki dukungan ekspresi reguler terbatas. Agar semua contoh berikut berfungsi, gunakan egrep sebagai gantinya atau grep -E.
Untuk mencari garis menggunakan | untuk mencocokkan salah satu ekspresi:
$ egrep 'xzz|xzz' file sayaUntuk menemukan garis menggunakan | untuk mencocokkan salah satu ekspresi dalam string juga gunakan ( ):
$ egrep '^x(Yz|yz)' file saya
Untuk menemukan garis menggunakan [ ] untuk mencocokkan karakter apa pun:
$ egrep '^x[Yy]z' file sayaUntuk menemukan baris menggunakan [ ] untuk TIDAK cocok dengan karakter apa pun:
$ egrep '^x[^Yy]z' file sayaUntuk menemukan garis menggunakan * untuk mencocokkan 0 atau lebih dari ekspresi sebelumnya:
$ egrep '^xy*z' file saya
Untuk menemukan garis menggunakan + untuk mencocokkan 1 atau lebih dari ekspresi sebelumnya:
$ egrep '^xy+z' file sayaUntuk mencari garis menggunakan ? untuk mencocokkan 0 atau 1 dari ekspresi sebelumnya:
$ egrep '^xy?z'file saya
Latihan III
- Temukan semua baris yang berisi nama Evans atau laki-laki dalam file orang.
- Temukan semua baris yang berisi nama Smith, Smyth atau Smythe dalam file orang.
- Temukan semua baris yang berisi nama Coklat, Brown atau Bron dalam file orang.Jika kamu punya waktu:
- Temukan baris yang berisi string (admin), termasuk tanda kurung, dalam file people.
- Temukan baris yang berisi karakter * di file people.
- Gabungkan 5 dan 6 di atas untuk menemukan kedua ekspresi.
Lebih Banyak Contoh
Untuk mencari garis menggunakan . dan * untuk mencocokkan rangkaian karakter apa pun:
$ egrep '^xy.*z' file sayaUntuk menemukan garis menggunakan untuk mencocokkan N jumlah karakter:
$ egrep '^xy3z' file saya$ egrep '^xy4z' file saya
Untuk menemukan garis menggunakan untuk mencocokkan N kali atau lebih:
$ egrep '^xy3,z' file sayaUntuk menemukan garis menggunakan untuk mencocokkan N kali tetapi tidak lebih dari M kali:
$ egrep '^xy2,3z' file saya
Kesimpulan
Dalam tutorial ini kita pertama kali melihat menggunakan grep dalam bentuknya yang sederhana untuk menemukan teks dalam file atau banyak file multiple. Kami kemudian menggabungkan teks yang akan dicari dengan ekspresi reguler sederhana dan kemudian yang lebih kompleks menggunakan egrep.
Langkah selanjutnya
Saya harap Anda akan menggunakan pengetahuan yang diperoleh di sini untuk digunakan dengan baik. Mencoba grep perintah pada data Anda sendiri dan ingat, ekspresi reguler seperti yang dijelaskan di sini dapat digunakan dalam bentuk yang sama di vi, sed dan awk!
Solusi Latihan
Latihan I
Pertama hitung berapa banyak baris yang ada di file /etc/passwd.$ wc -l /etc/passwd
Sekarang temukan semua kemunculan teks var dalam file /etc/passwd.$ grep var /etc/passwd
Temukan berapa banyak baris dalam file yang berisi teks var
Temukan berapa banyak baris yang TIDAK mengandung teks var.
grep -cv var /etc/passwdTemukan entri untuk login Anda di /etc/passwd mengajukangrep kdm /etc/passwd
Latihan II
Menampilkan file orang-orang dan periksa isinya.$ orang kucing
Temukan semua baris yang berisi string Smith dalam file orang-orang.$ grep 'Smith' people
Buat file baru, orang-orang, berisi semua baris yang dimulai dengan string Pribadi dalam orang-orang mengajukan$ grep '^Pribadi' orang> norang
Konfirmasikan isi file orang-orang dengan membuat daftar file.$ kucing n orang
Sekarang tambahkan semua baris di mana teks berakhir dengan string 500 dalam file orang-orang ke file orang-orang.$ grep '500$' orang>>norang
Sekali lagi, konfirmasikan isi file orang-orang dengan membuat daftar file.$ kucing n orang
Temukan Alamat IP server yang disimpan dalam file /etc/hosts.$ grep $(nama host) /etc/hosts
Menggunakan egrep untuk mengekstrak dari /etc/passwd file baris akun yang berisi lp atau id pengguna Anda sendiri.$ egrep '(lp|kdm :)' /etc/passwd
Latihan III
Temukan semua baris yang berisi nama Evans atau laki-laki dalam file orang-orang.$ egrep 'Evans|Maler' people
Temukan semua baris yang berisi nama Smith, Smyth atau Smythe dalam file orang-orang.$ egrep 'Sm(i|y)the?' orang-orang
Temukan semua baris yang berisi nama cokelat, coklat atau Bron dalam file orang.$ egrep 'Alis?e?n' orang
Temukan baris yang berisi string (admin), termasuk tanda kurung, dalam file orang-orang.
Temukan baris yang berisi karakter * dalam file orang.$ egrep '\*' orang
Gabungkan 5 dan 6 di atas untuk menemukan kedua ekspresi.