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.
xyzxyzde
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 myfileatau
$ alias grep = 'grep --color'$ grep xyz myfile
Pilihan
Pilihan biasa yang digunakan dengan grep arahan merangkumi:
- -saya dapati semua garis tanpa mengira kes
- -c mengira berapa banyak baris yang mengandungi teks
- -n garis paparan nombor garis yang sepadan
- -Saya paparkan sahaja fail nama-nama pertandingan itu
- -r rekursif carian sub-direktori
- -v cari semua garis TIDAK mengandungi teks
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
- Kira terlebih dahulu berapa banyak baris yang terdapat dalam fail / etc / passwd.
- Sekarang cari semua kejadian teks var dalam fail / etc / passwd.
- Cari berapa baris dalam fail yang mengandungi teks
- Cari berapa baris yang TIDAK mengandungi teks var.
- 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' myfileUntuk mencari semua baris yang diakhiri dengan teks menggunakan watak $:
$ grep 'xyz $' myfileUntuk mencari baris yang mengandungi rentetan menggunakan watak ^ dan $ kedua:
$ grep '^ xyz $' myfileUntuk 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' myfileUntuk mencari garis menggunakan .* untuk memadankan 0 atau lebih watak apa pun:
$ grep '^ x.* z 'myfileUntuk mencari garis menggunakan \ untuk melarikan diri dari watak *:
$ grep '^ x \ * z' myfileUntuk mencari penggunaan \ watak:
$ grep '\\' myfile
Ungkapan grep - egrep
The grep 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 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 |
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 / passwdWalau 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 25000Peribadi 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
- Paparkan fail orang dan meneliti kandungannya.
- Cari semua baris yang mengandungi rentetan Smith dalam fail orang.Petunjuk: gunakan perintah grep tetapi ingat bahawa secara lalai, peka huruf besar kecil.
- Buat fail baru, npeople, yang mengandungi semua baris yang bermula dengan rentetan Peribadi dalam fail orang.Petunjuk: gunakan perintah grep dengan>.
- Sahkan kandungan fail orang dengan menyenaraikan fail.
- Sekarang tambahkan semua baris di mana teks berakhir dengan rentetan 500 dalam fail orang ke fail orang.Petunjuk: gunakan perintah grep dengan >>.
- Sekali lagi, sahkan kandungan fail orang dengan menyenaraikan fail.
- Cari Alamat IP pelayan yang disimpan dalam fail / dll / tuan rumah.Petunjuk: gunakan perintah grep dengan $ (nama host)
- 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' myfileUntuk 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' myfileUntuk mencari garis menggunakan [] untuk TIDAK sepadan dengan mana-mana watak:
$ egrep '^ x [^ Yy] z' myfileUntuk 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' myfileUntuk mencari garis menggunakan ? untuk memadankan 0 atau 1 ungkapan sebelumnya:
$ egrep '^ xy?z 'myfile
Latihan III
- Cari semua baris yang mengandungi nama Evans atau Maler dalam fail orang.
- Cari semua baris yang mengandungi nama Smith, Smyth atau Smythe dalam orang fail.
- Cari semua baris yang mengandungi nama Coklat, Browen atau Bron dalam fail orang.Sekiranya anda mempunyai masa:
- Cari garis yang mengandungi rentetan (pentadbir), termasuk kurungan, dalam fail orang.
- Cari baris yang mengandungi watak * dalam fail orang.
- 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 'myfileUntuk 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' myfileUntuk 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
Cari berapa baris yang TIDAK mengandungi teks var.
grep -cv var / etc / passwdCari entri untuk log masuk anda di / etc / passwd failgrep 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.
Cari garis yang mengandungi watak * dalam orang fail.$ egrep '\ *' orang
Gabungkan 5 dan 6 di atas untuk mencari kedua-dua ungkapan.