Günlük dosyasında birden fazla dizeyi aramak istiyorum. Tüm arama dizilerinin aynı satırda olduğu yerlerde yalnızca bu girişler yüksek olmalıdır. Bu veya daha iyi bir seçenek için daha az komut kullanabilir miyim. Günlük dosyam boyutu genellikle birkaç GB'dir.Unix'te daha az komut kullanarak bir günlük dosyasında birden çok dizge nasıl aranır?
5
A
cevap
6
string1
veya string2
için arama yapmak istediğinizde /string1|string2
kullanın. Eğer doğrultusunda sırasını biliyoruz ve tam bir çizgi görmek istemediğinizde
/string1.*string2
, sen
/.*string1.*string2.*|.*string2.*string1.*
Veya daha kısa
gerekecektir: Sen hem nerede bulabileceğimi hatları istediğini söyledi/.*(string1.*string2|string2.*string1).*
Sabit bir sıra olmadan daha fazla sözcük birleştirmek karmaşaya dönüşür ve ilk olarak awk
ile filtrelemek güzeldir.
3
Kullanım awk
filtrelenmiş Sonucu görmek için dosya ve less
filtrelemek için: Dosya büyükse
awk '/pattern1/ && /pattern2/ && /pattern3/' file.log | less
Eğer less
önceki sonuçları görmek için stdbuf
kullanmak isteyebilirsiniz:
stdbuf awk '/pattern1/ && /pattern2/ && /pattern3/' file.log | less
Teşekkürler! Benim için çalıştı. Şahsen, "dosya açıksa, arama dizesini hızlı bir şekilde değiştirebilirim, geçerli konumdan ileriye/geriye doğru arama yapabilmem" nedeniyle awk'den daha az tercih ederim. Birden fazla dizeyi daha az ile arama yeteneği bir bonus. – Satish
Bunu tercih edersiniz çünkü bu cevap sadece iki * arama modelini ele alır. Desen sayısını arttırdığınızda ya da desenler daha karmaşık olduğunda, bu durum çok karmaşıktır. * Üç * desen yazmanın neredeyse imkansızdır. – hek2mgl
@ hek2mgl katılıyorum, benim durumumda arama dizgileri sırası biliniyor ve sadece 2 veya 3 arama dizgisi max var, bu yüzden tercih etti. Aksi halde daha azıyla awk önerdiğin gibi gitmek için yoldur. – Satish