grep

Menggunakan grep (dan egrep) dengan Ungkapan Biasa

Menggunakan grep (dan egrep) dengan Ungkapan Biasa
Tutorial ini menerangkan cara menggunakan kedua-duanya grep (dan egrep) to cari teks dalam fail, dalam bentuk ringkas dan digabungkan dengan ungkapan biasa. Ia mengandungi beberapa contoh dan senaman, tambah penyelesaian, untuk penonton selesai.

Nama grep berasal dari perintah ed (dan vim) "g / re / p", yang berarti mencari secara global untuk ungkapan biasa tertentu dan mencetak (menampilkan) 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 grep boleh 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:

$ kucing myfile

Carian Ringkas

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

$ grep xyz myfile

Menggunakan Warna

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

$ grep --warna xyz myfile

atau

$ alias grep = 'grep --color'
$ grep xyz myfile

Pilihan

Pilihan biasa yang digunakan dengan grep arahan merangkumi:

Sebagai contoh:

$ grep -i xyz myfile # cari teks tanpa mengira kes
$ grep -ic xyz myfile # garis pengiraan dengan teks
$ grep -in xyz myfile # tunjukkan nombor baris

Buat Berbilang Fail

Sebelum mencuba beberapa fail, buat dahulu beberapa fail baru:

$ echo xyz> myfile1
$ echo -e "xyz \ nxzz \ nXYZ"> myfile2
$ echo -e "xxx \ nyyy"> myfile3
$ kucing myfile1
$ kucing myfile2
$ kucing myfile3

Cari Berbilang Fail

Untuk mencari beberapa fail menggunakan nama fail atau wildcard masukkan:

$ grep -ic xyz myfile myfile1 myfile2 myfile3
$ grep-dalam xyz my * 
# padankan nama fail yang bermula dengan 'my'

Latihan I

  1. Kira terlebih dahulu berapa banyak baris yang terdapat dalam fail / etc / passwd.
Petunjuk: gunakan wc -l / etc / passwd
  1. Sekarang cari semua kejadian teks var dalam fail / etc / passwd.
  2. Cari berapa baris dalam fail yang mengandungi teks
  3. Cari berapa baris yang TIDAK mengandungi teks var.
  4. Cari entri untuk log masuk anda di / etc / passwd

Penyelesaian latihan boleh didapati di akhir artikel ini.

Menggunakan Ungkapan Biasa

Arahan grep 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 grep, vim dan sed. Perhatikan bahawa tali mungkin harus 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 ^:

$ grep '^ xyz' myfile

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

$ grep 'xyz $' myfile

Untuk mencari baris yang mengandungi rentetan menggunakan watak ^ dan $ kedua:

$ grep '^ xyz $' myfile

Untuk mencari garis menggunakan . untuk memadankan sebarang watak:

$ grep '^ x.z 'myfile

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

$ grep '^ xy * z' myfile

Untuk mencari garis menggunakan .* untuk memadankan 0 atau lebih watak apa pun:

$ grep '^ x.* z 'myfile

Untuk mencari garis menggunakan \ untuk melarikan diri dari watak *:

$ grep '^ x \ * z' myfile

Untuk mencari penggunaan \ watak:

$ grep '\\' myfile

Ungkapan grep - egrep

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

Perhatikan bahawa ungkapan mesti disertakan dalam sepasang tanda petik.

Untuk menggunakan warna, gunakan -warna atau buat lagi 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)' / etc / passwd

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 grep perintah tidak menyokong semua ungkapan biasa:

$ grep '(^ root | ^ uucp | ^ mail)' / etc / passwd

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

$ grep -E '(^ ​​root | ^ uucp | ^ mail)' / etc / passwd

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 penyaring kerana 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 diteruskan sebagai input standard ke grep perintah. Keluaran dari grep arahan kemudian dihantar sebagai input ke lebih banyak lagi perintah.

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

$ ls -l / etc | grep '^ d' | lagi

Perintah berikut adalah contoh penggunaan penapis:

$ ps -ef | grep cron

$ siapa | grep kdm

Fail Contoh

Untuk mencuba tinjauan, buat pertama kali 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.Coklat 27500
Latihan C.Browen 23400
(Pentadbir) R.Bron 30500
Goodsout T.Smyth 30000
Peribadi F.Jones 25000
latihan * C.Evans 25500
Goodsout W.Paus 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 yang 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 orang.Petunjuk: gunakan perintah grep dengan >>.
  6. Sekali lagi, sahkan kandungan fail orang dengan menyenaraikan fail.
  7. Cari Alamat IP pelayan yang disimpan 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 tegak 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 grep 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 kedua-dua ungkapan:

$ egrep 'xxz | xzz' myfile

Untuk mencari garis menggunakan | untuk memadankan salah satu ungkapan dalam rentetan juga gunakan ():

$ egrep '^ x (Yz | yz)' myfile

Untuk mencari garis menggunakan [] untuk memadankan watak apa pun:

$ egrep '^ x [Yy] z' myfile

Untuk mencari garis 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 Maler dalam fail orang.
  2. Cari semua baris yang mengandungi nama Smith, Smyth atau Smythe dalam orang fail.
  3. Cari semua baris yang mengandungi nama Coklat, Browen atau Bron 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 grep 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 grep perintah pada data anda sendiri dan ingat, ungkapan biasa seperti yang dijelaskan di sini dapat digunakan dalam bentuk yang sama dalam vi, 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 var dalam fail / etc / passwd.
$ grep var / etc / passwd
Cari berapa baris dalam fail yang mengandungi teks var

grep -c var / etc / passwd

Cari berapa baris yang TIDAK mengandungi teks var.

grep -cv var / etc / passwd

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

Latihan II

Paparkan fail orang dan meneliti kandungannya.
$ kucing orang
Cari semua garisan yang mengandungi rentetan Smith dalam fail orang.
$ grep 'Smith' orang
Buat fail baru, orang-orang, mengandungi semua baris bermula dengan rentetan Peribadi di dalam orang fail
$ grep '^ Peribadi' orang> orang
Sahkan kandungan fail orang-orang dengan menyenaraikan fail.
$ kucing npeople
Sekarang tambahkan semua baris di mana teks berakhir dengan rentetan 500 dalam fail orang ke fail orang-orang.
$ grep '500 $' orang >> npeople
Sekali lagi, sahkan kandungan fail orang-orang dengan menyenaraikan fail.
$ kucing npeople
Cari Alamat IP pelayan yang disimpan dalam fail / dll / tuan rumah.
$ grep $ (nama host) / etc / host
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 Maler dalam fail orang.
$ egrep 'Evans | Maler' orang
Cari semua baris yang mengandungi nama Smith, Smyth atau Smythe dalam fail orang.
$ egrep 'Sm (i | y) yang?'orang
Cari semua baris yang mengandungi nama Coklat, Browen atau Bron dalam fail orang.
$ egrep 'Kening?e?n 'orang
Cari garis yang mengandungi rentetan (pentadbir), termasuk tanda kurung, dalam fail orang.

$ egrep '\ (Admin \)' orang

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

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


Tambahkan isyarat Tetikus ke Windows 10 menggunakan alat percuma ini
Dalam beberapa tahun kebelakangan ini komputer dan sistem operasi telah banyak berkembang. Ada saat ketika pengguna harus menggunakan perintah untuk m...
Mengawal & menguruskan pergerakan tetikus antara beberapa monitor di Windows 10
Pengurus Tetikus Paparan Dwi membolehkan anda mengawal & mengkonfigurasi pergerakan tetikus antara beberapa monitor, dengan memperlahankan pergerakann...
WinMouse membolehkan anda menyesuaikan & meningkatkan pergerakan penunjuk tetikus pada PC Windows
Sekiranya anda ingin meningkatkan fungsi lalai penunjuk tetikus anda gunakan perisian percuma WinMouse. Ia menambah lebih banyak ciri untuk membantu a...