Saya melewati daftar pola regex grep
untuk memeriksa file syslog. Mereka biasanya cocok dengan alamat IP dan entri log;
grep "1\.2\.3\.4.*Has exploded" syslog.log
Itu hanya daftar pola seperti "1\.2\.3\.4.*Has exploded"
bagian yang saya lewati, dalam satu lingkaran, jadi saya tidak bisa melewatkan "-v" misalnya.
Saya bingung mencoba melakukan kebalikan dari yang di atas, garis TIDAK cocok dengan alamat IP dan kesalahan tertentu jadi "! 1.2.3.4. * Telah meledak" akan cocok dengan baris syslog untuk apa pun selain 1.2.3.4 mengatakan kepada saya itu telah meledak . Saya harus bisa memasukkan IP agar TIDAK cocok.
Saya telah melihat berbagai posting serupa di StackOverflor namun mereka menggunakan pola regex yang sepertinya tidak bisa saya kerjakan grep
. Adakah yang bisa memberikan contoh kerja untuk grep
tolong?
PEMBARUAN: Ini terjadi dalam skrip seperti ini;
patterns[1]="1\.2\.3\.4.*Has exploded"
patterns[2]="5\.6\.7\.8.*Has died"
patterns[3]="\!9\.10\.11\.12.*Has exploded"
for i in {1..3}
do
grep "${patterns[$i]}" logfile.log
done
patterns[3]="\!9\.10\.11\.12.*Has exploded"
perubahanpatterns[3]="(?<!9\.10\.11\.12).*Has exploded"
dangrep "${patterns[$i]}" logfile.log
perubahan padagrep -P "${patterns[$i]}" logfile.log
PCRE mengasumsikan lebih banyak karakter meta secara default, sehingga beberapa pelarian mungkin perlu dihilangkan dari ekspresi pencocokan lainnya.Jawaban:
grep
cocok,grep -v
apakah kebalikannya. Jika Anda perlu "mencocokkan A tetapi bukan B" Anda biasanya menggunakan pipa:sumber
-v
dan Anda bisa menggunakannya dalam satu lingkaran. Mungkin Anda perlu lebih spesifik tentang keterbatasan Anda, atau mungkin Anda memiliki kesalahpahaman tentang bagaimana skrip Anda seharusnya bekerja. Coba posting beberapa kode.Anda perlu menjalankan ini dengan -P untuk memiliki tampilan negatif di belakang (Perl regular expression), jadi perintahnya adalah:
Coba ini. Ini menggunakan tampilan negatif di belakang untuk mengabaikan garis jika didahului oleh
1.2.3.4
. Semoga itu bisa membantu!sumber
grep
tidak mendukung lookaround. Kecuali jika Anda menggunakan Gnugrep
dan menggunakan--P
parameter untuk membuatnya menggunakan mesin PCRE.grep -P '(?<!1\.2\.3\.4) Has exploded' test.log
Perhatikan bahwa tampilan di belakang hanya berfungsi pada karakter segera sebelum bagian yang cocok dari ekspresi, jadi jika ada hal-hal lain antara alamat dan pesan, misalnya1.2.3.4 FOO Has exploded
, ini tidak akan berfungsi..*
negatif di belakang karena contohnya juga ada, saya bayangkan mungkin ada teks lain di antaranya.harus sama dengan
sumber