GNU/Linux >> Belajar Linux >  >> Linux

Perintah Grep di Linux (Temukan Teks di File)

grep command singkatan dari “global regular expression print”, dan merupakan salah satu perintah yang paling kuat dan umum digunakan di Linux.

grep mencari satu atau lebih file input untuk baris yang cocok dengan pola tertentu dan menulis setiap baris yang cocok ke output standar. Jika tidak ada file yang ditentukan, grep membaca dari input standar, yang biasanya merupakan output dari perintah lain.

Pada artikel ini, kami akan menunjukkan cara menggunakan grep perintah melalui contoh-contoh praktis dan penjelasan rinci tentang grep GNU yang paling umum pilihan.

grep Sintaks Perintah #

Sintaks untuk grep perintahnya adalah sebagai berikut:

grep [OPTIONS] PATTERN [FILE...]

Item dalam tanda kurung siku adalah opsional.

  • OPTIONS - Nol atau lebih banyak pilihan. Grep menyertakan sejumlah opsi yang mengontrol perilakunya.
  • PATTERN - Pola pencarian.
  • FILE - Nol atau lebih nama file masukan.

Untuk dapat mencari file, pengguna yang menjalankan perintah harus memiliki akses baca ke file.

Mencari String di File #

Penggunaan paling dasar dari grep perintahnya adalah untuk mencari string (teks) dalam sebuah file.

Misalnya, untuk menampilkan semua baris yang berisi string bash dari /etc/passwd file, Anda akan menjalankan perintah berikut:

grep bash /etc/passwd

Outputnya akan terlihat seperti ini:

root:x:0:0:root:/root:/bin/bash
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash

Jika string menyertakan spasi, Anda harus mengapitnya dalam tanda kutip tunggal atau ganda:

grep "Gnome Display Manager" /etc/passwd

Balikkan Pencocokan (Kecualikan) #

Untuk menampilkan garis yang tidak cocok dengan pola, gunakan -v ( atau --invert-match ) pilihan.

Misalnya untuk mencetak baris yang tidak mengandung string nologin Anda akan menggunakan:

grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash
colord:x:124:124::/var/lib/colord:/bin/false
git:x:994:994:git daemon user:/:/usr/bin/git-shell
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash

Menggunakan Grep untuk Memfilter Output dari Perintah #

Keluaran perintah dapat difilter dengan grep melalui pemipaan, dan hanya garis yang cocok dengan pola tertentu yang akan dicetak pada terminal.

Misalnya, untuk mengetahui proses mana yang berjalan di sistem Anda sebagai pengguna www-data anda dapat menggunakan ps berikut ini perintah:

ps -ef | grep www-data
www-data 18247 12675  4 16:00 ?        00:00:00 php-fpm: pool www
root     18272 17714  0 16:00 pts/0    00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data
www-data 31147 12770  0 Oct22 ?        00:05:51 nginx: worker process
www-data 31148 12770  0 Oct22 ?        00:00:00 nginx: cache manager process

Anda juga dapat menyambungkan beberapa pipa sesuai perintah. Seperti yang Anda lihat pada output di atas, ada juga baris yang berisi grep proses. Jika Anda tidak ingin baris itu ditampilkan, berikan output ke grep lain contoh seperti yang ditunjukkan di bawah ini.

ps -ef | grep www-data | grep -v grep
www-data 18247 12675  4 16:00 ?        00:00:00 php-fpm: pool www
www-data 31147 12770  0 Oct22 ?        00:05:51 nginx: worker process
www-data 31148 12770  0 Oct22 ?        00:00:00 nginx: cache manager process

Untuk mencari pola secara rekursif, panggil grep dengan -r opsi (atau --recursive ). Saat opsi ini digunakan grep akan menelusuri semua file di direktori yang ditentukan, melewatkan symlink yang ditemui secara rekursif.

Untuk mengikuti semua tautan simbolik, alih-alih -r , gunakan -R opsi (atau --dereference-recursive ).

Berikut adalah contoh yang menunjukkan cara mencari string linuxize.com di semua file di dalam /etc direktori:

grep -r linuxize.com /etc

Outputnya akan menyertakan baris yang cocok yang diawali dengan path lengkap ke file:

/etc/hosts:127.0.0.1 node2.linuxize.com
/etc/nginx/sites-available/linuxize.com:    server_name linuxize.com   www.linuxize.com;

Jika Anda menggunakan -R opsi, grep akan mengikuti semua tautan simbolik:

grep -R linuxize.com /etc

Perhatikan baris terakhir dari output di bawah ini. Baris itu tidak dicetak ketika grep dipanggil dengan -r karena file di dalam sites-enabled Ng Nginx direktori adalah symlink ke file konfigurasi di dalam sites-available direktori.

/etc/hosts:127.0.0.1 node2.linuxize.com
/etc/nginx/sites-available/linuxize.com:    server_name linuxize.com   www.linuxize.com;
/etc/nginx/sites-enabled/linuxize.com:    server_name linuxize.com   www.linuxize.com;

Hanya Tampilkan Nama File #

Untuk menekan grep default default output dan cetak hanya nama file yang berisi pola yang cocok, gunakan -l ( atau --files-with-matches ) pilihan.

Perintah di bawah mencari semua file yang diakhiri dengan .conf di direktori kerja saat inidan hanya mencetak nama file yang berisi string linuxize.com :

grep -l linuxize.com *.conf

Outputnya akan terlihat seperti ini:

tmux.conf
haproxy.conf

-l opsi biasanya digunakan dalam kombinasi dengan opsi rekursif -R :

grep -Rl linuxize.com /tmp

Secara default, grep peka huruf besar/kecil. Ini berarti bahwa karakter huruf besar dan kecil diperlakukan berbeda.

Untuk mengabaikan huruf besar/kecil saat mencari, aktifkan grep dengan -i opsi (atau --ignore-case ).

Misalnya, saat menelusuri Zebra tanpa opsi apa pun, perintah berikut tidak akan menampilkan output apa pun, yaitu ada baris yang cocok:

grep Zebra /usr/share/words

Tetapi jika Anda melakukan pencarian peka huruf besar/kecil menggunakan -i pilihan, itu akan cocok dengan huruf besar dan kecil:

grep -i Zebra /usr/share/words

Menentukan “Zebra” akan cocok dengan “zebra”, “ZEbrA” atau kombinasi huruf besar dan kecil lainnya untuk string tersebut.

zebra
zebra's
zebras

Cari Kata Lengkap #

Saat mencari string, grep akan menampilkan semua baris tempat string disematkan dalam string yang lebih besar.

Misalnya, jika Anda mencari "gnu", semua baris di mana "gnu" disematkan dalam kata yang lebih besar, seperti "cygnus" atau "magnum" akan dicocokkan:

grep gnu /usr/share/words
cygnus
gnu
interregnum
lgnu9d
lignum
magnum
magnuson
sphagnum
wingnut

Untuk mengembalikan hanya baris di mana string yang ditentukan adalah seluruh kata (diapit oleh karakter non-kata), gunakan -w ( atau --word-regexp ) pilihan.

Karakter kata termasuk karakter alfanumerik (a-z , A-Z , dan 0-9 ) dan garis bawah (_ ). Semua karakter lain dianggap sebagai karakter non-kata.

Jika Anda menjalankan perintah yang sama seperti di atas, termasuk -w opsi, grep perintah hanya akan mengembalikan baris di mana gnu disertakan sebagai kata terpisah.

grep -w gnu /usr/share/words
gnu

Tampilkan Nomor Baris #

-n ( atau --line-number ) opsi memberitahu grep untuk menunjukkan nomor baris dari baris yang berisi string yang cocok dengan pola. Saat opsi ini digunakan, grep mencetak kecocokan dengan keluaran standar yang diawali dengan nomor baris.

Misalnya untuk menampilkan baris dari /etc/services file yang berisi string bash diawali dengan nomor baris yang cocok, Anda dapat menggunakan perintah berikut:

grep -n 10000 /etc/services

Output di bawah ini menunjukkan kepada kita bahwa kecocokan ditemukan pada baris 10423 dan 10424.

10423:ndmp            10000/tcp
10424:ndmp            10000/udp

Hitung Kecocokan #

Untuk mencetak jumlah baris yang cocok ke keluaran standar, gunakan -c ( atau --count ) pilihan.

Pada contoh di bawah, kami menghitung jumlah akun yang memiliki /usr/bin/zsh sebagai cangkang.

regular expressiongrep -c '/usr/bin/zsh' /etc/passwd
4

Mode Senyap #

-q (atau --quiet ) memberitahu grep untuk berjalan dalam mode senyap untuk tidak menampilkan apa pun pada output standar. Jika kecocokan ditemukan, perintah keluar dengan status 0 . Ini berguna saat menggunakan grep dalam skrip shell tempat Anda ingin memeriksa apakah file berisi string dan melakukan tindakan tertentu tergantung pada hasilnya.

Berikut adalah contoh penggunaan grep dalam mode senyap sebagai perintah uji dalam if pernyataan:

if grep -q PATTERN filename
then
    echo pattern found
else
    echo pattern not found
fi

Ekspresi Reguler Dasar #

GNU Grep memiliki tiga set fitur ekspresi reguler, Basic, Extended dan Perl-compatible.

Secara default, grep menginterpretasikan pola sebagai ekspresi reguler dasar di mana semua karakter kecuali karakter meta sebenarnya adalah ekspresi reguler yang cocok dengan dirinya sendiri.

Di bawah ini adalah daftar meta-karakter yang paling umum digunakan:

  • Gunakan ^ (caret) simbol untuk mencocokkan ekspresi di awal baris. Pada contoh berikut, string kangaroo akan cocok hanya jika itu terjadi di awal baris.

    grep "^kangaroo" file.txt
  • Gunakan $ (dolar) simbol untuk mencocokkan ekspresi di akhir baris. Pada contoh berikut, string kangaroo akan cocok hanya jika itu terjadi di akhir baris.

    grep "kangaroo$" file.txt
  • Gunakan . (titik) simbol untuk mencocokkan setiap karakter tunggal. Misalnya, untuk mencocokkan apa pun yang dimulai dengan kan kemudian memiliki dua karakter dan diakhiri dengan string roo , Anda dapat menggunakan pola berikut:

    grep "kan..roo" file.txt
  • Gunakan [ ] (tanda kurung) untuk mencocokkan karakter tunggal apa pun yang diapit tanda kurung. Misalnya, temukan baris yang berisi accept atau “accent , Anda dapat menggunakan pola berikut:

    grep "acce[np]t" file.txt
  • Gunakan [^ ] untuk mencocokkan karakter tunggal apa pun yang tidak terlampir dalam tanda kurung. Pola berikut akan cocok dengan kombinasi string apa pun yang berisi co(any_letter_except_l)a , seperti coca , cobalt dan seterusnya, tetapi tidak akan cocok dengan baris yang berisi cola ,

    grep "co[^l]a" file.txt

Untuk menghindari arti khusus dari karakter berikutnya, gunakan \ (garis miring terbalik).

Extended Regular Expressions #

Untuk menafsirkan pola sebagai ekspresi reguler yang diperluas, gunakan -E ( atau --extended-regexp ) pilihan. Ekspresi reguler yang diperluas mencakup semua meta-karakter dasar, bersama dengan meta-karakter tambahan untuk membuat pola pencarian yang lebih kompleks dan kuat. Berikut adalah beberapa contohnya:

  • Cocokkan dan ekstrak semua alamat email dari file yang diberikan:

    grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
  • Cocokkan dan ekstrak semua alamat IP yang valid dari file yang diberikan:

    grep -E -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' file.txt

-o opsi digunakan untuk mencetak hanya string yang cocok.

Telusuri Beberapa String (Pola) #

Dua atau lebih pola pencarian dapat digabungkan menggunakan operator ATAU | .

Secara default, grep menginterpretasikan pola sebagai ekspresi reguler dasar di mana meta-karakter seperti | kehilangan arti khususnya, dan versi garis miring terbaliknya harus digunakan.

Pada contoh di bawah ini kami mencari semua kemunculan kata fatal , error , dan critical dalam file kesalahan log Nginx:

grep 'fatal\|error\|critical' /var/log/nginx/error.log

Jika Anda menggunakan opsi ekspresi reguler yang diperluas -E , lalu operator | tidak boleh diloloskan, seperti yang ditunjukkan di bawah ini:

grep -E 'fatal|error|critical' /var/log/nginx/error.log

Untuk mencetak sejumlah baris tertentu sebelum mencocokkan baris, gunakan -B ( atau --before-context ) pilihan.

Misalnya, untuk menampilkan lima baris konteks awal sebelum mencocokkan baris, Anda dapat menggunakan perintah berikut:

grep -B 5 root /etc/passwd

Untuk mencetak sejumlah baris tertentu setelah mencocokkan baris, gunakan -A ( atau --after-context ) pilihan.

Misalnya, untuk menampilkan lima baris konteks tambahan setelah baris yang cocok, Anda akan menggunakan perintah berikut:

grep -A 5 root /etc/passwd

Kesimpulan #

grep perintah memungkinkan Anda untuk mencari pola di dalam file. Jika kecocokan ditemukan, grep mencetak baris yang berisi pola yang ditentukan.

Masih banyak lagi yang bisa dipelajari tentang Grep di Halaman Manual Pengguna Grep.

Jika Anda memiliki pertanyaan atau masukan, jangan ragu untuk memberikan komentar.


Linux
  1. 5 Alat Baris Perintah untuk Menemukan File dengan Cepat di Linux

  2. 25 Berguna menemukan Contoh Praktis Perintah di Linux

  3. Cara Menggunakan Perintah find Linux untuk Menemukan File

  1. Cara Menggunakan Perintah Grep untuk Menemukan Teks di File

  2. Cara Menemukan File dengan Perintah fd di Linux

  3. Bagaimana cara menemukan semua file yang berisi teks tertentu di Linux?

  1. Cara menemukan file di Linux

  2. Perintah Linux:Bagaimana cara 'menemukan' hanya file teks?

  3. Bagaimana menemukan file teks yang tidak mengandung teks di Linux?