Cara Mengecualikan Pola, File, dan Direktori Dengan grep

Sejak tahun 1974, perintah grep Linux telah membantu orang menemukan string dalam file. Tapi terkadang grep terlalu teliti. Berikut adalah beberapa cara untuk memberitahu grep untuk mengabaikan hal yang berbeda.

Perintah grep

Perintah grep mencari file teks mencari string yang cocok dengan pola pencarian yang Anda berikan pada baris perintah. Kekuatan grep terletak pada penggunaan ekspresi regulernya. Ini memungkinkan Anda menjelaskan apa yang Anda cari, daripada harus mendefinisikannya secara eksplisit.

Kelahiran grep sudah ada sebelum Linux. itu dikembangkan pada awal 1970-an di Unix. Ini mengambil namanya dari urutan kunci g/re/p di editor baris ed (kebetulan, diucapkan “ee-dee”). Ini adalah singkatan dari global, pencarian kilat reguler, garis pencocokan cetak.

grep terkenal—mungkin, terkenal—teliti dan berpikiran tunggal. Terkadang ia akan mencari file atau direktori yang Anda inginkan tanpa membuang waktu, karena hasilnya dapat membuat Anda tidak dapat melihat kayu untuk pepohonan.

Tentu saja, ada beberapa cara untuk memerintah grep in. Anda dapat memerintahkannya untuk mengabaikan pola, file, dan direktori sehingga grep menyelesaikan pencariannya lebih cepat, dan Anda tidak dibanjiri dengan kesalahan positif yang tidak berarti. seperti cat , atau Anda dapat memberikan nama file sebagai parameter baris perintah terakhir.

Kami menggunakan file pendek yang berisi teks puisi Jabberwocky, oleh Lewis Carroll. Dalam dua contoh ini, kami menelusuri baris yang cocok dengan istilah penelusuran “Jabberwock.”

cat jabberwocky.txt | grep "Jabberwock"grep "Jabberwock" jabberwocky.text

Baris yang berisi kecocokan dengan petunjuk pencarian terdaftar untuk kita, dengan elemen yang cocok di setiap baris disorot dengan warna merah. Itu pencarian langsung. Tetapi bagaimana jika kita ingin mengecualikan baris yang mengandung kata “Jabberwock” dan mencetak sisanya?

Kita dapat melakukannya dengan opsi -v (invert match). Ini mencantumkan baris yang tidak cocok dengan istilah pencarian.

grep -v "Jabberwock" jabberwocky.text

Baris yang tidak mengandung “Jabberwock” terdaftar di jendela terminal.

Kami dapat mengecualikan istilah sebanyak yang kami inginkan. Mari kita saring setiap baris yang mengandung “Jabberwock” dan setiap baris yang mengandung “dan.” Untuk mencapai ini, kami akan menggunakan opsi -e (ekspresi). Kita perlu menggunakannya untuk setiap pola pencarian yang kita gunakan.

grep -v -e "Jabberwock" -e "dan" jabberwocky.txt

Ada penurunan jumlah baris yang sesuai di output.

Jika kita menggunakan -E (diperpanjang regex), kita dapat menggabungkan pola pencarian dengan “|“, yang dalam konteks ini tidak menunjukkan pipa, ini adalah operator logika OR.

grep -Ev "Jabberwock|and" jabberwocky.txt

Kami mendapatkan output yang persis sama dengan kami lakukan dengan perintah sebelumnya yang bertele-tele.

Format perintahnya sama jika Anda ingin menggunakan pola regex alih-alih petunjuk pencarian eksplisit. Perintah ini akan mengecualikan semua baris yang dimulai dengan huruf apa pun dalam himpunan “ACHT.”

grep -Ev "^ACHT" jabberwocky.txt

Untuk melihat baris yang berisi pola tetapi juga tidak mengandung pola lain, kita dapat menyalurkan grep ke grep. Kami akan menelusuri semua baris yang berisi kata “Jabberwock”, lalu memfilter semua baris yang juga berisi kata “slain.”

grep "Jabberwock" jabberwocky.txt | grep -v "slain"

Mengecualikan File

Kita dapat meminta grep untuk mencari string atau pola dalam kumpulan file. Anda dapat membuat daftar setiap file pada baris perintah, tetapi dengan banyak file yang mendekati tidak scale.

grep "vorpal" ayat-1.txt ayat-2.txt ayat-3.txt ayat-4.txt ayat-5.txt verse-6.txt

Perhatikan bahwa nama file yang berisi baris yang cocok ditampilkan di awal setiap baris output.

Untuk mengurangi pengetikan, kita dapat menggunakan wildcard. Tapi itu bisa berlawanan dengan intuisi. Tampaknya ini berfungsi.

grep "vorpal" *.txt

Namun, di direktori ini ada file TXT lain, yang tidak ada hubungannya dengan puisi itu. Jika kita mencari kata “pedang” dengan struktur perintah yang sama, kita mendapatkan banyak positif palsu.

grep "pedang" *.txt

Hasil yang kita inginkan ditutupi oleh banjir hasil palsu dari file lain yang memiliki ekstensi TXT .

Kata “vorpal” tidak cocok dengan apa pun, tetapi “pedang” termasuk dalam kata “kata sandi” sehingga ditemukan berkali-kali di beberapa pseudo-logfiles.

Kita perlu mengecualikan file-file ini. Untuk melakukan itu, kami akan menggunakan opsi –exclude. Untuk mengecualikan satu file bernama “vol-log-1.txt” kami akan menggunakan perintah ini:

grep --exclude=vol-log-1.txt "sword" *.txt

Dalam contoh ini, kami ingin mengecualikan beberapa file log dengan nama yang dimulai dengan “vol.” Sintaks yang kita butuhkan adalah:

grep --exclude=vol*.txt "sword" *.txt

Ketika kita menggunakan opsi -R (dereference-recursive) grep akan mencari seluruh pohon direktori untuk kita. Secara default, itu akan mencari melalui semua file di lokasi tersebut. Mungkin ada beberapa jenis file yang ingin kami kecualikan.

Di bawah direktori saat ini pada mesin uji ini, ada direktori bersarang yang berisi file log, file CSV, dan file MD. Ini semua adalah jenis file teks yang ingin kami kecualikan. Kita dapat menggunakan opsi –exclude untuk setiap jenis file, tetapi kita dapat mencapai apa yang diinginkan secara lebih efisien dengan mengelompokkan jenis file.

Perintah ini mengecualikan semua file yang memiliki ekstensi CSV atau MD, dan semua file TXT yang namanya dimulai dengan ” vol” atau “log.”

grep -R --exclude=*.{csv,md} --exclude={vol*,log*}.txt "sword" /home/dave/data/

Excluding Directories

Jika file yang kita inginkan untuk mengabaikan terdapat dalam direktori dan tidak ada file di direktori yang ingin kita cari, kita dapat mengecualikan seluruh direktori tersebut.

Konsepnya sangat mirip dengan mengecualikan file, kecuali kita menggunakan opsi –exclude-dir dan beri nama direktori yang akan diabaikan.

grep -R --exclude-dir=backup "vorpal" /home/dave/data

Kami telah mengecualikan direktori “cadangan”, tetapi kami masih mencari melalui direktori lain yang disebut “backup2.”

It’ Tidak mengherankan jika kita dapat menggunakan opsi –exclude-dir beberapa kali dalam satu perintah. Perhatikan bahwa jalur ke direktori yang dikecualikan harus diberikan relatif terhadap direktori tempat pencarian akan dimulai. Jangan gunakan jalur absolut dari akar sistem file.

grep -R --exclude-dir=backup --exclude-dir =backup2 "vorpal" /home/dave/data

Kita juga dapat menggunakan pengelompokan. Kita dapat mencapai hal yang sama secara lebih ringkas dengan:

grep -R --exclude-dir={backup,backup2} "vorpal" /home/dave/data

Anda dapat menggabungkan pengecualian file dan direktori dalam perintah yang sama. Jika Anda ingin mengecualikan semua file dari direktori dan mengecualikan jenis file tertentu dari direktori yang dicari, gunakan sintaks ini:

grep -R --exclude=*.{csv,md} --exclude-dir=backup/archive " frumious" /home/dave/data

Itulah berita seputar Cara Mengecualikan Pola, File, dan Direktori Dengan grep, semoga bermanfaat. Disadur dari HowToGeek.com.