grep mengecualikan beberapa string


116

Saya mencoba melihat file log menggunakan tail -fdan ingin mengecualikan semua baris yang berisi string berikut:

"Nopaging the limit is"`  and `"keyword to remove is"

Saya dapat mengecualikan satu string seperti ini:

tail -f admin.log|grep -v "Nopaging the limit is"

Tetapi bagaimana cara mengecualikan baris yang mengandung salah satu dari string1atau string2.

Jawaban:


107

Dua contoh memfilter beberapa baris dengan grep:

Taruh ini di filename.txt:

abc
def
ghi
jkl

perintah grep menggunakan opsi -E dengan pipa antara token dalam string:

grep -Ev 'def|jkl' filename.txt

cetakan:

abc
ghi

Perintah menggunakan opsi -v dengan pipa antar token yang dikelilingi oleh tanda kurung:

egrep -v '(def|jkl)' filename.txt

cetakan:

abc
ghi

15
Saya terkejut tidak ada yang berbicara tentang grep -v -e def -e jklmetode yang IMHO lebih jelas…
Frizlab

4
Atau bahkan lebih baik: grep -Fv -e def -e jklyang lebih cepat!
Frizlab

11
Dengan flag -F, Anda bisa menggunakan baris baru sebagai pembatas, bukan pipa. Hal ini memungkinkan penggunaan keluaran perintah sebagai filter dengan lebih mudah, misalnya:grep -vF $(pgrep myprocess)
Phlarx

45
grep -Fv -e 'Nopaging the limit is' -e 'keyword to remove is'

-F cocok dengan string literal (bukan ekspresi reguler)

-v membalikkan pertandingan

-e memungkinkan beberapa pola pencarian (semua literal dan terbalik)


1
Ini adalah jawaban yang benar: Satu-satunya yang menghindari grep -vcontoh ganda dan persyaratan buatan regex (memungkinkan beberapa string ditentukan dengan rapi dalam argumen terpisah). Bayangkan saja membuat regex itu secara terprogram dalam skrip untuk string yang dapat berisi apa saja…
user2394284

Sebenarnya tidak ada satupun dari ini adalah jawaban yang benar karena ketika melewatkan tidak ada kata kunci untuk mengecualikan itu akan mengecualikan semuanya, bukan tidak sama sekali.
Győri Sándor

37

Pilihan lainnya adalah membuat daftar pengecualian, ini berguna khususnya ketika Anda memiliki daftar panjang hal-hal untuk dikecualikan.

vi /root/scripts/exclude_list.txt

Sekarang tambahkan apa yang ingin Anda kecualikan

Nopaging the limit is
keyword to remove is

Sekarang gunakan grep untuk menghapus baris dari file log file Anda dan melihat informasi yang tidak dikecualikan.

grep -v -f /root/scripts/exclude_list.txt /var/log/admin.log

1
Saya tidak menyadari Anda dapat menggunakan -vdengan -f(atau yang terakhir bahkan ada).
Sridhar Sarnobat

sangat sangat berguna!
samaspin

Perhatikan, Anda tidak perlu membuat file sementara untuk daftar pengecualian. Dalam bash Anda dapat menggunakan substitusi proses. Ini berguna jika daftar pengecualian agak dinamis dan Anda harus membuatnya sebelum setiap penggunaan hanya untuk digunakan sekali:grep -v -f <(gen_exclusions.sh) /var/log/admin.log
Miroslav


15
tail -f admin.log|grep -v -E '(Nopaging the limit is|keyword to remove is)'

11

Anda dapat menggunakan grep biasa seperti ini:

tail -f admin.log | grep -v "Nopaging the limit is\|keyword to remove is"


1
Jawaban ini berhasil untuk saya di MacOSX.
Meloloskan

5

Grep bisa dirantai. Sebagai contoh:

tail -f admin.log | grep -v "Nopaging the limit is" | grep -v "keyword to remove is"

1
Tangkapannya di sini adalah bahwa alih-alih proses yang akan menyaring, Anda harus menjalankan N proses secara berurutan, di mana masing-masing dari mereka menyaring sesuatu. Itu bisa memperlambat segalanya secara signifikan.
Artem Oboturov
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.