grep

Menggunakan grep (dan egrep) dengan Ekspresi Reguler

Menggunakan grep (dan egrep) dengan Ekspresi Reguler
Tutorial ini menjelaskan cara menggunakan keduanya grep (dan egrep) untuko temukan teks dalam file, dalam bentuknya yang sederhana dan ketika digabungkan dengan ekspresi reguler. Ini berisi beberapa contoh dan latihan, plus solusi, untuk diselesaikan oleh pemirsa.

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.

xyz
xyzde
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 myfile

atau

$ alias grep='grep --color'
$ grep xyz file saya

Pilihan

Opsi umum yang digunakan dengan grep perintah meliputi:

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

  1. Hitung dulu berapa banyak baris yang ada di file /etc/passwd.
Petunjuk: gunakan wc -l /etc/passwd
  1. Sekarang temukan semua kemunculan teks var dalam file /etc/passwd.
  2. Temukan berapa banyak baris dalam file yang berisi teks
  3. Temukan berapa banyak baris yang TIDAK mengandung teks var.
  4. 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 saya

Untuk menemukan semua baris yang diakhiri dengan teks menggunakan karakter $:

$ grep 'xyz$' file saya

Untuk menemukan baris yang berisi string menggunakan karakter ^ dan $:

$ grep '^xyz$' file saya

Untuk 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 saya

Untuk mencari garis menggunakan .* untuk mencocokkan 0 atau lebih karakter apa pun:

$ grep '^x.*z' file saya

Untuk mencari garis menggunakan \ untuk keluar dari karakter *:

$ grep '^x\*z' file saya

Untuk menemukan \ karakter gunakan:

$ grep '\\' file saya

Ekspresi grep - egrep

Itu grep perintah hanya mendukung sebagian dari ekspresi reguler yang tersedia. Namun, perintah egrep:

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
$ egrep '(^root|^uucp|^mail)' /etc/passwd

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/passwd

Namun, 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       25000
Pribadi       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

  1. Menampilkan file orang-orang dan periksa isinya.
  2. Temukan semua baris yang berisi string Smith dalam file orang.Petunjuk: gunakan perintah grep tetapi ingat bahwa secara default, ini peka huruf besar-kecil.
  3. Buat file baru, npeople, berisi semua baris yang dimulai dengan string Pribadi dalam file orang.Petunjuk: gunakan perintah grep dengan >.
  4. Konfirmasikan isi file npeople dengan membuat daftar file.
  5. Sekarang tambahkan semua baris di mana teks berakhir dengan string 500 dalam file people ke file npeople.Petunjuk: gunakan perintah grep dengan >>.
  6. Sekali lagi, konfirmasikan isi file npeople dengan membuat daftar file.
  7. Temukan Alamat IP server yang disimpan dalam file /etc/hosts.Petunjuk: gunakan perintah grep dengan $(hostname)
  8. 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 saya

Untuk 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 saya

Untuk menemukan baris menggunakan [ ] untuk TIDAK cocok dengan karakter apa pun:

$ egrep '^x[^Yy]z' file saya

Untuk 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 saya

Untuk mencari garis menggunakan ? untuk mencocokkan 0 atau 1 dari ekspresi sebelumnya:

$ egrep '^xy?z'file saya

Latihan III

  1. Temukan semua baris yang berisi nama Evans atau laki-laki dalam file orang.
  2. Temukan semua baris yang berisi nama Smith, Smyth atau Smythe dalam file orang.
  3. Temukan semua baris yang berisi nama Coklat, Brown atau Bron dalam file orang.Jika kamu punya waktu:
  4. Temukan baris yang berisi string (admin), termasuk tanda kurung, dalam file people.
  5. Temukan baris yang berisi karakter * di file people.
  6. 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 saya

Untuk 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 saya

Untuk 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

grep -c var /etc/passwd

Temukan berapa banyak baris yang TIDAK mengandung teks var.

grep -cv var /etc/passwd

Temukan entri untuk login Anda di /etc/passwd mengajukan
grep 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.

$ egrep '\(Admin\)' orang

Temukan baris yang berisi karakter * dalam file orang.
$ egrep '\*' orang
Gabungkan 5 dan 6 di atas untuk menemukan kedua ekspresi.

$ egrep '\(Admin\)|\*' orang


Cara Menggunakan Cheat Engine GameConqueror di Linux
Artikel ini mencakup panduan tentang menggunakan mesin cheat GameConqueror di Linux. Banyak pengguna yang bermain game di Windows sering menggunakan a...
Emulator Konsol Game Terbaik untuk Linux
Artikel ini akan mencantumkan perangkat lunak emulasi konsol game populer yang tersedia untuk Linux. Emulasi adalah lapisan kompatibilitas perangkat l...
Distro Linux Terbaik untuk Gaming pada tahun 2021
Sistem operasi Linux telah berkembang jauh dari tampilan aslinya, sederhana, berbasis server. OS ini telah sangat meningkat dalam beberapa tahun terak...