Menggunakan grep (dan egrep) dengan Ekspresi Reguler

Using Grep With Regular Expressions



Tutorial ini menjelaskan cara menggunakan keduanya pegangan (dan egrep) untuk o menemukan teks dalam file, dalam bentuk sederhana dan ketika dikombinasikan dengan ekspresi reguler. Ini berisi beberapa contoh dan latihan , lagi solusi , untuk diselesaikan pemirsa.

Nama pegangan 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 pegangan dapat digunakan untuk menemukan teks sederhana dalam file atau file tertentu. Untuk mencoba contoh, pertama buat file contoh.



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
xz
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:



$kucingfile saya

Pencarian Sederhana

Untuk menemukan teks 'xyz' di dalam file, jalankan yang berikut ini:

$peganganxyz file saya

Menggunakan Warna

Untuk menampilkan warna, gunakan –color (tanda hubung ganda) atau cukup buat alias. Sebagai contoh:

$pegangan --warnaxyz file saya

atau

$alias pegangan= 'pegangan--warna'
$peganganxyz file saya

Pilihan

Opsi umum yang digunakan dengan pegangan perintah meliputi:

  • -saya menemukan semua baris terlepas dari kasus
  • -C menghitung berapa banyak baris yang berisi teks?
  • -n tampilan garis angka dari garis yang cocok
  • -l hanya menampilkan mengajukan nama pertandingan itu
  • -R rekursif pencarian sub-direktori
  • -v temukan semua baris BUKAN berisi teks

Sebagai contoh:

$pegangan -Sayaxyz file saya# temukan teks terlepas dari kasusnya

$pegangan -icxyz file saya# hitung baris dengan teks

$pegangan -di dalamxyz file saya# tampilkan nomor baris

Buat Banyak File

Sebelum mencoba mencari banyak file, buat dulu beberapa file baru:

$dibuangxyz>file saya1
$dibuang -Danxyz xzz XYZ>file saya2
$dibuang -Danxxx yyy>file saya3
$kucingfile saya1
$kucingfile saya2
$kucingfile saya3

Cari Banyak File

Untuk mencari beberapa file menggunakan nama file atau wildcard, masukkan:

$pegangan -icxyz myfile myfile1 myfile2 myfile3
$pegangan -di dalamxyz saya*
# cocokkan nama file yang dimulai dengan 'saya'

Latihan I

  1. Hitung dulu berapa banyak baris yang ada di file /etc/passwd.
Petunjuk: gunakantoilet -NS /dll/paswd
  1. Sekarang temukan semua kemunculan teks di mana dalam file /etc/passwd .
  2. Temukan berapa banyak baris dalam file yang berisi teks
  3. Temukan berapa banyak baris yang TIDAK mengandung teks di mana .
  4. Temukan entri untuk login Anda di /etc/passwd

Solusi latihan dapat ditemukan di akhir artikel ini.

Menggunakan Ekspresi Reguler

Perintah pegangan 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 pegangan , saya datang dan sed . Perhatikan bahwa string mungkin perlu diapit tanda kutip.

Karakter khusus yang tersedia meliputi:

^ Awal dari sebuah garis
$ Akhir dari sebuah baris
. Karakter apa pun (kecuali baris baru)
* 0 atau lebih ekspresi sebelumnya
Mendahului simbol membuatnya menjadi karakter literal

Perhatikan bahwa *, yang dapat digunakan pada baris perintah untuk mencocokkan sejumlah karakter termasuk tidak ada, adalah bukan 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 ^:

$pegangan'^xyz' file saya

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

$pegangan'xyz$' file saya

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

$pegangan'^xyz$' file saya

Untuk mencari garis menggunakan . untuk mencocokkan karakter apa pun:

$pegangan'^x.z' file saya

Untuk menemukan garis menggunakan * untuk mencocokkan 0 atau lebih dari ekspresi sebelumnya:

$pegangan‘^xy*z 'file saya

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

$pegangan'^X*z 'file saya

Untuk mencari garis menggunakan untuk keluar dari karakter *:

$pegangan'^ X *z 'file saya

Untuk menemukan karakter gunakan:

$pegangan'\' file saya

Ekspresi grep – egrep

NS pegangan 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 --warna'

Untuk mencari lebih dari satu ekspresi reguler NS 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)' /dll/paswd

Ini mengekstrak baris yang dimulai dengan root, uucp atau mail dari file, | simbol yang berarti salah satu opsi.

Perintah berikut akan bukan bekerja, meskipun tidak ada pesan yang ditampilkan, karena dasarnya pegangan perintah tidak mendukung semua ekspresi reguler:

$pegangan '(^root|^uucp|^mail)' /dll/paswd

Namun, pada sebagian besar sistem Linux perintah grep -E sama dengan menggunakan egrep :

$pegangan -DAN '(^root|^uucp|^mail)' /dll/paswd

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 pegangan memerintah. Keluaran dari pegangan perintah kemudian diteruskan sebagai input ke lagi memerintah.

Ini hanya akan menampilkan direktori di /dll :

$ls -NS /dll|pegangan'^d'|lagi

Perintah berikut adalah contoh penggunaan filter:

$ps -ef|pegangancron

$siapa|pegangankdm

Contoh File

Untuk mencoba latihan review, pertama buat file contoh berikut.

Gunakan editor seperti nano atau vim untuk menyalin teks di bawah ini ke dalam file bernama rakyat:

Pribadi J.Smith 25000
E.Smith Pribadi 25400
Pelatihan A.Brown 27500
Pelatihan C.Brown 23400
(Admin) R.Bron 30500
Goodsout T.Smyth 30000
F.Jones Pribadi 25000
pelatihan* C.Evans 25500
Barang keluar W.Paus 30400
Lantai dasar T.Smythe 30500
Staf J.Maler 33000

Latihan II

  1. Menampilkan file rakyat dan memeriksa isinya.
  2. Temukan semua baris yang berisi string Smith dalam file people.Hint: 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 di file people.Hint: 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 di file people ke file npeople.Hint : 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 .Hint: 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 ., batang vertikal atau simbol pipa |, tanda tanya ?, asterisk atau bintang *, tanda plus + dan tanda kurung buka 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 baris baru)
* 0 atau lebih ekspresi sebelumnya
| 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 pegangan hanya memiliki dukungan ekspresi reguler yang terbatas. Agar semua contoh berikut berfungsi, gunakan egrep sebagai gantinya atau grep -E .

Untuk mencari garis menggunakan | untuk mencocokkan salah satu ekspresi:

$egrep'xz|xzz' myfile

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[Y y]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 pelukis 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 Sumber dalam file people.Jika Anda punya waktu:
  4. Temukan baris yang berisi string (admin), termasuk tanda kurung, dalam file people.
  5. Cari 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‘^xy{3}z 'file saya
$egrep‘^xy{4}z 'file saya

Untuk menemukan garis menggunakan {} untuk mencocokkan N kali atau lebih:

$egrep‘^xy{3,}z 'file saya

Untuk menemukan garis menggunakan {} untuk mencocokkan N kali tetapi tidak lebih dari M kali:

$egrep‘^xy{2,3}z 'file saya

Kesimpulan

Dalam tutorial ini kita pertama kali melihat menggunakan pegangan dalam bentuk sederhana untuk menemukan teks dalam file atau beberapa file. 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 pegangan perintah pada data Anda sendiri dan ingat, ekspresi reguler seperti yang dijelaskan di sini dapat digunakan dalam bentuk yang sama di kami , 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 di mana dalam file /etc/passwd.
$ grep var /etc/passwd
Temukan berapa banyak baris dalam file yang berisi teks di mana

pegangan -Cdi mana/dll/paswd

Temukan berapa banyak baris yang TIDAK mengandung teks di mana .

pegangan -CVdi mana/dll/paswd

Temukan entri untuk login Anda di /etc/passwd mengajukan
grep kdm /etc/passwd

Latihan II

Menampilkan file rakyat dan memeriksa isinya.
$ cat people
Temukan semua baris yang berisi string Smith dalam file rakyat .
$ grep 'Smith' people
Buat file baru, orang-orang , berisi semua baris yang dimulai dengan string Pribadi dalam rakyat mengajukan
$ grep '^Personal' people> npeople
Konfirmasikan isi file orang-orang dengan membuat daftar file.
$ cat npeople
Sekarang tambahkan semua baris di mana teks berakhir dengan string 500 dalam file rakyat ke file orang-orang .
$ grep '500$' people>>npeople
Sekali lagi, konfirmasikan isi file orang-orang dengan membuat daftar file.
$ cat npeople
Temukan Alamat IP server yang disimpan dalam file /etc/hosts .
$ grep $(hostname) /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 pelukis dalam file rakyat .
$ egrep 'Evans|Maler' people
Temukan semua baris yang berisi nama Smith , Smyth atau Smythe dalam file rakyat .
$ egrep 'Sm(i|y)the?' people
Temukan semua baris yang berisi nama cokelat , coklat atau Sumber dalam file orang.
$ egrep 'Brow?e?n' people
Temukan baris yang berisi string (admin), termasuk tanda kurung, dalam file rakyat .

$egrep '(Admin)'rakyat

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

$egrep '(Admin)|*'rakyat