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 myfileMenggunakan Warna
Untuk memaparkan warna, gunakan –warna (tanda hubung ganda) atau buat alias. Sebagai contoh:
$cengkaman --warnaxyz myfileatau
$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
- Kira terlebih dahulu berapa banyak baris yang terdapat dalam fail / etc / passwd.
- Sekarang cari semua kejadian teks di mana dalam fail / etc / passwd .
- Cari berapa baris dalam fail yang mengandungi teks
- Cari berapa baris yang TIDAK mengandungi teks di mana .
- 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’ myfileUntuk mencari semua baris yang diakhiri dengan teks menggunakan watak $:
$cengkaman‘Xyz $’ myfileUntuk mencari garis yang mengandungi rentetan menggunakan aksara ^ dan $:
$cengkaman‘^ Xyz $’ myfileUntuk mencari garis menggunakan . untuk memadankan sebarang watak:
$cengkaman‘^ X.z’ myfileUntuk mencari baris menggunakan * untuk mencocokkan 0 atau lebih ungkapan sebelumnya:
$cengkaman‘^ Xy*z 'myfileUntuk mencari garis menggunakan. * Untuk mencocokkan 0 atau lebih watak mana pun:
$cengkaman‘^ X.*z 'myfileUntuk mencari garis menggunakan untuk melarikan diri dari watak *:
$cengkaman‘^ X *z 'myfileUntuk mengetahui penggunaan watak:
$cengkaman‘\’ myfileUngkapan 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 |
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 laluanWalau bagaimanapun, pada kebanyakan sistem Linux arahannya grep -E sama dengan menggunakan egrep :
$cengkaman -AND '(^ root | ^ uucp | ^ mail)' /dan lain-lain/kata laluanMenggunakan 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 lagiPerintah berikut adalah contoh penggunaan penapis:
$ps -ef|cengkamancron $who|cengkamankdmFail 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 25000Peribadi 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
- 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 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 npeople. Petunjuk: gunakan perintah grep dengan >>.
- Sekali lagi, sahkan kandungan fail orang dengan menyenaraikan fail.
- Cari Alamat IP pelayan yang disimpan di 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 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 'myfileUntuk mencari garis menggunakan | untuk memadankan kedua-dua ungkapan dalam rentetan juga gunakan ():
$egrep‘^ X(Yz|yz)'MyfileUntuk mencari garis menggunakan [] untuk memadankan sebarang watak:
$egrep‘^ X[Yy]z 'myfileUntuk mencari baris 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 'myfileUntuk 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’ myfileLatihan III
- Cari semua baris yang mengandungi nama Evans atau pelukis dalam orang fail.
- Cari semua baris yang mengandungi nama Smith, Smyth atau Smythe dalam orang fail.
- Cari semua baris yang mengandungi nama Coklat, Browen atau Sumber 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 'myfileKesimpulannya
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
Cari berapa baris yang TIDAK mengandungi teks di mana .
cengkaman -CVdi mana/dan lain-lain/kata laluanCari 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 .
Cari garis yang mengandungi watak * dalam orang fail.
$ egrep '*' people
Gabungkan 5 dan 6 di atas untuk mencari kedua-dua ungkapan.