Menggunakan grep (dan egrep) dengan Ungkapan Biasa

Using Grep With Regular Expressions



Tutorial ini menerangkan cara menggunakan kedua-duanya cengkaman (dan egrep) t o cari teks dalam fail, dalam bentuk ringkas dan digabungkan dengan ungkapan biasa. Ia mengandungi beberapa contoh dan senaman , banyak lagi penyelesaian , untuk penonton selesai.

Nama cengkaman berasal dari perintah ed (dan vim) g / re / p, yang bermaksud mencari secara global untuk ungkapan biasa tertentu dan mencetak (paparkan) output.







Biasa Ungkapan

Utiliti tersebut membolehkan pengguna mencari fail teks untuk baris yang sesuai dengan ungkapan biasa ( regexp ). Ungkapan biasa adalah rentetan carian yang terdiri daripada teks dan satu atau lebih daripada 11 watak khas. Contoh mudah adalah memadankan permulaan garis.



Fail Contoh

Bentuk asas dari cengkaman mungkin digunakan untuk mencari teks sederhana dalam fail atau fail tertentu. Untuk mencuba contoh, buat pertama kali fail sampel.



Gunakan editor seperti nano atau vim untuk menyalin teks di bawah ke dalam fail yang dipanggil myfile .





xyz
xyzde
exyzd
dexyz
d? gxyz
xxz
xzz
x z
x * z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz

Walaupun anda dapat menyalin dan menempelkan contoh-contoh dalam teks (perhatikan bahawa tanda petik berganda mungkin tidak disalin dengan betul), perintah perlu diketik untuk mempelajarinya dengan betul.

Sebelum mencuba contoh, lihat fail contoh:



$kucingmyfile

Carian Ringkas

Untuk mencari teks 'xyz' dalam fail jalankan yang berikut:

$cengkamanxyz myfile

Menggunakan Warna

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

$cengkaman --warnaxyz myfile

atau

$alias cengkaman= 'cengkaman--warna'
$cengkamanxyz myfile

Pilihan

Pilihan biasa yang digunakan dengan cengkaman arahan merangkumi:

  • -saya mencari semua garis tanpa mengira kes
  • -c mengira berapa banyak baris yang mengandungi teks
  • -n garis paparan nombor garis yang sepadan
  • -l paparan sahaja fail nama pertandingan itu
  • -r rekursif carian sub-direktori
  • -v cari semua garisan TIDAK mengandungi teks

Sebagai contoh:

$cengkaman -ixyz myfile# cari teks tanpa mengira kes

$cengkaman -Kad Pengenalanxyz myfile# mengira garis dengan teks

$cengkaman -dalamxyz myfile# tunjukkan nombor garis

Buat Berbilang Fail

Sebelum mencuba beberapa fail, buat dahulu beberapa fail baru:

$membuangxyz>myfile1
$membuang -Danxyz nxzz nXYZ>myfile2
$membuang -Danxxx nyyy>myfile3
$kucingmyfile1
$kucingmyfile2
$kucingmyfile3

Cari Berbilang Fail

Untuk mencari beberapa fail menggunakan nama fail atau wildcard masukkan:

$cengkaman -Kad Pengenalanxyz myfile myfile1 myfile2 myfile3
$cengkaman -dalamxyz my*
# padankan nama fail yang bermula dengan 'saya'

Latihan I

  1. Kira terlebih dahulu berapa banyak baris yang terdapat dalam fail / etc / passwd.
Petunjuk: penggunaanwc -tempat /dan lain-lain/kata laluan
  1. Sekarang cari semua kejadian teks di mana dalam fail / etc / passwd .
  2. Cari berapa baris dalam fail yang mengandungi teks
  3. Cari berapa baris yang TIDAK mengandungi teks di mana .
  4. Cari entri untuk log masuk anda di / etc / passwd

Penyelesaian latihan boleh didapati di akhir artikel ini.

Menggunakan Ungkapan Biasa

Arahan cengkaman mungkin juga digunakan dengan ungkapan biasa dengan menggunakan satu atau lebih dari sebelas watak atau simbol khas untuk memperhalusi pencarian. Ungkapan biasa adalah rentetan watak yang merangkumi watak khas untuk membolehkan pemadanan corak dalam utiliti seperti cengkaman , saya datang dan sed . Perhatikan bahawa tali mungkin perlu disertakan dalam tanda petik.

Watak khas yang ada termasuk:

^ Permulaan garis
$ Akhir sebaris
. Mana-mana watak (kecuali n barisan baru)
* 0 atau lebih ungkapan sebelumnya
Mendahului simbol menjadikannya watak literal

Perhatikan bahawa *, yang mungkin digunakan pada baris perintah untuk mencocokkan sebilangan watak termasuk tidak ada, adalah tidak digunakan dengan cara yang sama di sini.

Perhatikan juga penggunaan petikan dalam contoh berikut.

Contoh

Untuk mencari semua baris bermula dengan teks menggunakan watak ^:

$cengkaman‘^ Xyz’ myfile

Untuk mencari semua baris yang diakhiri dengan teks menggunakan watak $:

$cengkaman‘Xyz $’ myfile

Untuk mencari garis yang mengandungi rentetan menggunakan aksara ^ dan $:

$cengkaman‘^ Xyz $’ myfile

Untuk mencari garis menggunakan . untuk memadankan sebarang watak:

$cengkaman‘^ X.z’ myfile

Untuk mencari baris menggunakan * untuk mencocokkan 0 atau lebih ungkapan sebelumnya:

$cengkaman‘^ Xy*z 'myfile

Untuk mencari garis menggunakan. * Untuk mencocokkan 0 atau lebih watak mana pun:

$cengkaman‘^ X.*z 'myfile

Untuk mencari garis menggunakan untuk melarikan diri dari watak *:

$cengkaman‘^ X *z 'myfile

Untuk mengetahui penggunaan watak:

$cengkaman‘\’ myfile

Ungkapan grep - egrep

The cengkaman perintah hanya menyokong subset ungkapan biasa yang tersedia. Walau bagaimanapun, perintah itu egrep:

  • membolehkan penggunaan sepenuhnya semua ungkapan biasa
  • mungkin secara serentak mencari lebih daripada satu ungkapan

Perhatikan bahawa ungkapan mesti dilampirkan dalam sepasang tanda petik.

Untuk menggunakan warna, gunakan –warna atau sekali lagi buat alias:

$alias egrep='egrep - warna'

Untuk mencari lebih daripada satu regex yang egrep arahan boleh ditulis dalam pelbagai baris. Walau bagaimanapun, ini juga dapat dilakukan dengan menggunakan watak khas ini:

| Alternatif, sama ada satu atau yang lain
(…) Pengelompokan logik bahagian ungkapan
$egrep '(^ root | ^ uucp | ^ mail)' /dan lain-lain/kata laluan

Ini mengekstrak garis yang bermula dengan root, uucp atau surat dari fail, | simbol yang bermaksud salah satu pilihan.

Perintah berikut akan tidak berfungsi, walaupun tidak ada mesej yang dipaparkan, kerana yang asas cengkaman perintah tidak menyokong semua ungkapan biasa:

$cengkaman '(^ root | ^ uucp | ^ mail)' /dan lain-lain/kata laluan

Walau bagaimanapun, pada kebanyakan sistem Linux arahannya grep -E sama dengan menggunakan egrep :

$cengkaman -AND '(^ root | ^ uucp | ^ mail)' /dan lain-lain/kata laluan

Menggunakan Penapis

Paip adalah proses menghantar output dari satu perintah sebagai input ke perintah lain dan merupakan salah satu alat Linux paling kuat yang ada.

Perintah yang muncul dalam saluran pipa sering disebut sebagai penapis karena dalam banyak kasus mereka menyaring atau mengubah input yang dikirimkan kepada mereka sebelum mengirim aliran yang diubah ke output standar.

Dalam contoh berikut, output standard dari ls -l dihantar sebagai input standard ke cengkaman arahan. Keluaran dari cengkaman arahan kemudian dihantar sebagai input ke lebih banyak lagi arahan.

Ini hanya akan memaparkan direktori di /dan lain-lain :

$ls -tempat /dan lain-lain|cengkaman‘^ D’|lebih banyak lagi

Perintah berikut adalah contoh penggunaan penapis:

$ps -ef|cengkamancron

$who|cengkamankdm

Fail Contoh

Untuk mencuba latihan tinjauan, buat dahulu fail contoh berikut.

Gunakan editor seperti nano atau vim untuk menyalin teks di bawah ke dalam fail yang dipanggil orang:

Peribadi J.Smith 25000
Peribadi E.Smith 25400
Latihan A.Brown 27500
Latihan C.Browen 23400
(Pentadbir) R.Bron 30500
Goodsout T.Smyth 30000
Peribadi F.Jones 25000
latihan * C.Evans 25500
Goodsout W.Pope 30400
Tingkat bawah T.Smythe 30500
Peribadi J.Maler 33000

Latihan II

  1. Paparkan fail orang dan meneliti kandungannya.
  2. Cari semua baris yang mengandungi rentetan Smith dalam fail orang. Petunjuk: gunakan perintah grep tetapi ingat bahawa secara lalai, peka huruf besar kecil.
  3. Buat fail baru, npeople, yang mengandungi semua baris bermula dengan rentetan Peribadi dalam fail orang. Petunjuk: gunakan perintah grep dengan>.
  4. Sahkan kandungan fail orang dengan menyenaraikan fail.
  5. Sekarang tambahkan semua baris di mana teks berakhir dengan rentetan 500 dalam fail orang ke fail npeople. Petunjuk: gunakan perintah grep dengan >>.
  6. Sekali lagi, sahkan kandungan fail orang dengan menyenaraikan fail.
  7. Cari Alamat IP pelayan yang disimpan di dalam fail / dll / tuan rumah Petunjuk: gunakan perintah grep dengan $ (nama host)
  8. Gunakan egrep untuk mengekstrak dari / etc / passwd baris akaun fail yang mengandungi lp atau anda sendiri ID Pengguna .

Penyelesaian latihan boleh didapati di akhir artikel ini.

Ungkapan Lebih Biasa

Ungkapan biasa boleh dianggap sebagai wildcard pada steroid.

Terdapat sebelas aksara dengan makna khas: tanda kurung siku pembuka dan penutup [], garis miring terbalik , karet ^, tanda dolar $, noktah atau titik., Bar menegak atau simbol paip |, tanda tanya?, tanda bintang atau bintang *, tanda tambah + dan pendakap bulat pembukaan dan penutup {}. Watak khas ini juga sering disebut metacharacters.

Berikut adalah set watak khas:

^ Permulaan garis
$ Akhir sebaris
. Mana-mana watak (kecuali n barisan baru)
* 0 atau lebih ungkapan sebelumnya
| Alternatif, sama ada satu atau yang lain
[…] Kumpulan watak yang jelas untuk dipadankan
+ 1 atau lebih ungkapan sebelumnya
? 0 atau 1 ungkapan sebelumnya
Mendahului simbol menjadikannya watak literal
{…} Notasi pengukur yang jelas
(…) Pengelompokan logik bahagian ungkapan

Versi lalai dari cengkaman hanya mempunyai sokongan ungkapan biasa yang terhad. Agar semua contoh berikut dapat berfungsi, gunakan egrep sebaliknya atau grep -E .

Untuk mencari garis menggunakan | untuk memadankan sama ada ungkapan:

$egrep‘Xxz|xzz 'myfile

Untuk mencari garis menggunakan | untuk memadankan kedua-dua ungkapan dalam rentetan juga gunakan ():

$egrep‘^ X(Yz|yz)'Myfile

Untuk mencari garis menggunakan [] untuk memadankan sebarang watak:

$egrep‘^ X[Yy]z 'myfile

Untuk mencari baris menggunakan [] untuk TIDAK sepadan dengan mana-mana watak:

$egrep‘^ X[^ Yy]z 'myfile

Untuk mencari baris menggunakan * untuk mencocokkan 0 atau lebih ungkapan sebelumnya:

$egrep‘^ Xy*z 'myfile

Untuk mencari baris menggunakan + untuk mencocokkan 1 atau lebih ungkapan sebelumnya:

$egrep‘^ Xy + z’ myfile

Untuk mencari garis menggunakan? untuk memadankan 0 atau 1 ungkapan sebelumnya:

$egrep‘^ Xy? Z’ myfile

Latihan III

  1. Cari semua baris yang mengandungi nama Evans atau pelukis dalam orang fail.
  2. Cari semua baris yang mengandungi nama Smith, Smyth atau Smythe dalam orang fail.
  3. Cari semua baris yang mengandungi nama Coklat, Browen atau Sumber dalam fail orang. Sekiranya anda mempunyai masa:
  4. Cari garis yang mengandungi rentetan (pentadbir), termasuk kurungan, dalam fail orang.
  5. Cari baris yang mengandungi watak * dalam fail orang.
  6. Gabungkan 5 dan 6 di atas untuk mencari kedua-dua ungkapan.

Lebih Banyak Contoh

Untuk mencari garis menggunakan . dan * untuk memadankan sekumpulan watak:

$egrep‘^ Xy.*z 'myfile

Untuk mencari garis menggunakan {} untuk memadankan N bilangan aksara:

$egrep‘^ Xy{3}z 'myfile
$egrep‘^ Xy{4}z 'myfile

Untuk mencari garis menggunakan {} untuk memadankan N atau lebih banyak kali:

$egrep‘^ Xy{3,}z 'myfile

Untuk mencari garis menggunakan {} untuk memadankan N kali tetapi tidak lebih daripada M kali:

$egrep‘^ Xy{2,3}z 'myfile

Kesimpulannya

Dalam tutorial ini pertama kali kita melihat penggunaan cengkaman dalam bentuk mudah untuk mencari teks dalam fail atau dalam pelbagai fail. Kami kemudian menggabungkan teks yang akan dicari dengan ungkapan biasa yang sederhana dan kemudian yang lebih rumit menggunakan egrep .

Langkah seterusnya

Saya harap anda dapat memanfaatkan pengetahuan yang diperoleh di sini dengan baik. Cubalah cengkaman perintah pada data anda sendiri dan ingat, ungkapan biasa seperti yang dijelaskan di sini dapat digunakan dalam bentuk yang sama dalam kami , sed dan awk !

Penyelesaian Latihan

Latihan I

Kira dahulu berapa baris yang terdapat dalam fail / etc / passwd .
$ wc -l /etc/passwd
Sekarang cari semua kejadian teks di mana dalam fail / etc / passwd.
$ grep var /etc/passwd
Cari berapa baris dalam fail yang mengandungi teks di mana

cengkaman -cdi mana/dan lain-lain/kata laluan

Cari berapa baris yang TIDAK mengandungi teks di mana .

cengkaman -CVdi mana/dan lain-lain/kata laluan

Cari entri untuk log masuk anda di / etc / passwd fail
grep kdm /etc/passwd

Latihan II

Paparkan fail orang dan meneliti kandungannya.
$ cat people
Cari semua baris yang mengandungi rentetan Smith dalam fail orang .
$ grep 'Smith' people
Buat fail baru, orang-orang , mengandungi semua baris yang bermula dengan rentetan Peribadi di dalam orang fail
$ grep '^Personal' people> npeople
Sahkan kandungan fail orang-orang dengan menyenaraikan fail.
$ cat npeople
Sekarang tambahkan semua baris di mana teks berakhir dengan rentetan 500 dalam fail orang ke fail orang-orang .
$ grep '500$' people>>npeople
Sekali lagi, sahkan kandungan fail orang-orang dengan menyenaraikan fail.
$ cat npeople
Cari Alamat IP pelayan yang disimpan di dalam fail / dll / tuan rumah .
$ grep $(hostname) /etc/hosts
Gunakan egrep untuk mengekstrak dari / etc / passwd baris akaun fail yang mengandungi lp atau id pengguna anda sendiri.
$ egrep '(lp|kdm:)' /etc/passwd

Latihan III

Cari semua baris yang mengandungi nama Evans atau pelukis dalam fail orang .
$ egrep 'Evans|Maler' people
Cari semua baris yang mengandungi nama Smith , Smyth atau Smythe dalam fail orang .
$ egrep 'Sm(i|y)the?' people
Cari semua baris yang mengandungi nama Coklat , Browen atau Sumber dalam orang fail.
$ egrep 'Brow?e?n' people
Cari garis yang mengandungi rentetan (pentadbir), termasuk tanda kurung, dalam fail orang .

$egrep ' (Pentadbir )'orang

Cari garis yang mengandungi watak * dalam orang fail.
$ egrep '*' people
Gabungkan 5 dan 6 di atas untuk mencari kedua-dua ungkapan.

$egrep ' (Pentadbir ) | *'orang