Android

Perintah Grep di linux (cari teks dalam file)

perintah dasar linux debian (mkdir,ls,cd,nano,pwd,clear ) #2 -100%manusia_original

perintah dasar linux debian (mkdir,ls,cd,nano,pwd,clear ) #2 -100%manusia_original

Daftar Isi:

Anonim

The grep Perintah yang merupakan singkatan dari “global yang cetak ekspresi reguler” adalah salah satu perintah yang paling kuat dan umum digunakan dalam Linux.

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

Dalam tutorial ini, kami akan menunjukkan kepada Anda bagaimana menggunakan perintah grep melalui contoh-contoh praktis, dan penjelasan rinci tentang opsi grep GNU yang paling umum.

Sintaks Perintah Grep

Sebelum membahas cara menggunakan perintah grep , mari kita mulai dengan meninjau sintaks dasar.

Ekspresi utilitas grep mengambil bentuk berikut:

grep PATTERN

Item dalam tanda kurung adalah opsional.

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

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

Cara menggunakan grep untuk Mencari String di File

Penggunaan paling mendasar dari perintah grep adalah untuk mencari string (teks) dalam file.

Misalnya, untuk menampilkan baris dari file /etc/passwd berisi string bash Anda dapat menggunakan 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 melampirkannya dalam tanda kutip tunggal atau ganda:

grep "Gnome Display Manager" /etc/passwd

Balikkan Kecocokan (Kecualikan)

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

Misalnya untuk menampilkan baris dari file /etc/passwd yang tidak mengandung string nologin Anda dapat menggunakan perintah berikut:

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

Cara menggunakan Grep untuk Mencari String di Command Output

Alih-alih menentukan file input, Anda dapat mengirim output dari perintah lain ke grep , dan kemudian hanya menampilkan garis yang cocok dengan pola yang diberikan.

Misalnya, untuk mengetahui proses yang berjalan pada sistem Anda sebagai pengguna www-data Anda dapat menggunakan berikut ps 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 rantai beberapa pipa di perintah. Seperti yang Anda lihat di output di atas ada juga baris yang berisi proses grep . Jika Anda tidak ingin baris itu ditampilkan, berikan output ke instance grep lain 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 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

Pencarian Rekursif

Untuk mencari pola secara rekursif, gunakan opsi -r (atau --recursive ). Ini akan mencari melalui semua file di direktori yang ditentukan, melewatkan symlink yang ditemui secara rekursif. Untuk mengikuti semua tautan simbolis, gunakan opsi -R (atau --dereference-recursive ).

Dalam contoh berikut ini kami sedang mencari string linuxize.com di semua file di dalam direktori /etc :

grep -r linuxize.com /etc

Perintah akan mencetak garis yang cocok diawali oleh 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 sebaliknya -r Anda menggunakan opsi -R grep akan mengikuti semua tautan simbolik:

grep -R linuxize.com /etc

Perhatikan baris terakhir dari output. Baris itu tidak dicetak dalam contoh di atas karena file di dalam direktori yang sites-enabled Nginx adalah symlink ke file konfigurasi di dalam direktori yang sites-available di sites-available .

/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 output grep default dan hanya mencetak nama file yang berisi pola yang cocok, Anda dapat menggunakan opsi -l (atau --files-with-matches ).

Sebagai contoh untuk mencari semua file yang diakhiri dengan .conf di direktori kerja saat ini dan hanya mencetak nama-nama file yang berisi string tipe linuxize.com :

grep -l linuxize.com *.conf

Outputnya akan terlihat seperti ini:

tmux.conf haproxy.conf

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

grep -Rl linuxize.com /tmp

Pencarian Tidak Peka Huruf Besar Kecil

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

Untuk mengabaikan case saat mencari, gunakan opsi -i (atau --ignore-case ).

Sebagai contoh, ketika mencari Zebra tanpa opsi apapun, perintah berikut akan tidak menunjukkan output apapun yaitu ada garis-garis yang cocok:

grep Zebra /usr/share/words

Tetapi jika Anda melakukan kasus sensitif pencarian menggunakan -i pilihan, itu akan cocok dengan baik huruf atas dan bawah:

grep -i Zebra /usr/share/words

Menentukan "Zebra" akan cocok dengan "zebra", "ZEbrA" atau kombinasi huruf besar dan kecil lainnya untuk string itu.

zebra zebra's zebras

Cari Kata Lengkap

Saat mencari "gnu", grep juga akan mencetak baris di mana "gnu" disematkan dalam kata-kata yang lebih besar, seperti "cygnus" atau "magnum".

grep gnu /usr/share/words

cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut

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

Karakter kata termasuk karakter alfanumerik ( az , AZ dan 0-9 ) dan garis bawah ( _ ). Semua karakter lain dianggap sebagai karakter non-kata.

grep -w gnu /usr/share/words

gnu

Tampilkan Nomor Baris

Untuk menunjukkan jumlah baris yang berisi string yang cocok dengan pola, gunakan opsi -n (atau --line-number ). Bila menggunakan pilihan ini, grep akan mencetak pertandingan ke output standar diawali dengan nomor baris itu ditemukan di.

Sebagai contoh untuk menampilkan baris-baris dari file /etc/services 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 hitungan garis yang cocok dengan output standar, gunakan opsi -c (atau --count ).

Pada contoh di bawah, kita menghitung jumlah rekening yang telah /usr/bin/zsh sebagai shell.

grep -c '/usr/bin/zsh' /etc/passwd

4

Cari Banyak Strings (Pola)

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

Secara default, grep menafsirkan pola sebagai ekspresi reguler dasar di mana meta-karakter seperti | kehilangan makna khusus mereka, dan versi backslashed mereka harus digunakan.

Dalam contoh di bawah ini kami sedang mencari semua kejadian dari kata-kata fatal , error , dan critical dalam Nginx file error log:

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

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

Mode Diam

The -q (atau --quiet ) mengatakan grep untuk tidak menulis apa-apa ke terminal (standar output). Jika kecocokan ditemukan, perintah akan keluar dengan status 0 . Ini berguna ketika menggunakan skrip shell grep di mana Anda ingin memeriksa apakah file berisi string dan melakukan tindakan tertentu tergantung pada hasilnya.

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

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

Ekspresi Reguler Dasar

GNU Grep memiliki dua set fitur ekspresi reguler, Basic dan Extended. Secara default, grep menginterpretasikan pola sebagai ekspresi reguler dasar.

Ketika digunakan dalam mode dasar ekspresi reguler, semua karakter lain kecuali meta-karakter, sebenarnya ekspresi reguler yang cocok sendiri. Di bawah ini adalah daftar karakter meta yang paling umum digunakan:

  • Gunakan simbol ^ (tanda sisipan) untuk mencocokkan ekspresi pada awal baris. Pada contoh berikut, string ^kangaroo akan cocok hanya jika terjadi di bagian paling awal baris.

    grep "^kangaroo" file.txt

    Gunakan simbol $ (dolar) untuk mencocokkan ekspresi di akhir baris. Pada contoh berikut, string kangaroo$ akan cocok hanya jika terjadi pada akhir baris.

    grep "kangaroo$" file.txt

    Gunakan . simbol (periode) untuk mencocokkan karakter tunggal apa pun. 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

    Menggunakan (kurung) untuk mencocokkan karakter tunggal apa saja yang terlampir di dalam kurung. Misalnya, temukan baris yang berisi accept atau “ accent , Anda dapat menggunakan pola berikut:

    grep "accet" file.txt

    Menggunakan (kurung) untuk mencocokkan karakter tunggal apa saja yang terlampir di dalam kurung. Pola berikut akan cocok dengan kombinasi string mana pun yang mengandung co(any_letter_except_l)a , seperti coca , cobalt dan sebagainya, tetapi tidak akan cocok dengan garis yang mengandung cola , grep "coa" file.txt

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

Ekspresi Reguler Diperpanjang

Untuk menginterpretasikan pola sebagai ekspresi reguler diperpanjang, menggunakan -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. Di bawah ini adalah beberapa contoh:

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

    grep -E -o "\b+@+\.{2, 6}\b" file.txt

    Cocokkan dan ekstrak semua alamat IP yang valid dari file yang diberikan:

    grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt

Opsi -o digunakan untuk mencetak hanya string yang cocok.

Print Lines Before a Match

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

Misalnya, untuk menampilkan lima baris konteks terkemuka sebelum mencocokkan baris, Anda akan menggunakan perintah berikut:

grep -B 5 root /etc/passwd

Print Lines After a Match

Untuk mencetak sejumlah garis tertentu setelah garis yang cocok, gunakan opsi -A (atau - --after-context ).

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

grep -A 5 root /etc/passwd

Kesimpulan

Perintah grep memungkinkan Anda untuk mencari pola di dalam file. Jika cocok jika ditemukan, grep akan mencetak garis yang berisi pola yang ditentukan.

Ada banyak lagi untuk dipelajari tentang Grep di halaman Panduan Pengguna Grep.

terminal grep