2012-04-05 24 views
7

Aşağıdaki örnekte, köşeli parantezler içeren 'ABC' ile eşleşen satırları atlarken, yalnızca 'ABC' içeren satırı filtrelemem gerekiyor:Linux için RegExp yardıma gerek duyuyor Köşeli parantezler içeren satırları filtrelemek için Bash grep komutu

İşte
 
2012-04-04 04:13:48,760~sample1~ABC[TLE 5332.233 2/13/2032 3320392]:CAST 
2012-04-04 04:13:48,761~sample2~ABC 
2012-04-04 04:13:48,761~sample3~XYZ[BAC.CAD.ABC.CLONE 232511]:TEST 

ben ne var, ama şimdiye kadar başarıyla köşeli parantez ile satırları filtrelemek edemiyorum:

bash-3.00$ cat Metrics.log | grep -e '[^\[\]]' | grep -i 'ABC'

yardım edin?

açıklamalara dayanarak
+0

+1, net bir açıklama VE bazı örnek Kod! İyi şanslar. – shellter

cevap

3

Edited: deneyin

grep -i 'ABC' Metrics.log | grep -v "[[]" | grep -v "ABC\w"

Girdi:

2012-04-04 04:13:48,760~sample1~ABC[TLE 5332.233 2/13/2032 3320392]:CAST 
2012-04-04 04:13:48,761~sample2~ABC 
2012-04-04 04:13:48,761~sample3~XYZ[BAC.CAD.ABC.CLONE 232511]:TEST 
2012-04-04 04:13:48,761~sample4~XYZ 
2012-04-04 04:13:48,761~sample5~ABCD 
2012-04-04 04:13:48,761~sample6~ABC:TEST 

Çıkış: istenen çıktı örneği girişi için

2012-04-04 04:13:48,761~sample2~ABC 
2012-04-04 04:13:48,761~sample6~ABC:TEST 
+1

Eğer sizin için uygunsa, cevabı doğru olarak işaretlemek ister misiniz? Teşekkürler! – GetSet

+0

nota, metrics.log'a gerek yok, sadece 1. grep'e girdi olarak verin. grep -i 'ABC' Metrics.log | grep -v "[[]" ' – matchew

+0

Teşekkürler. Cevaplandı olarak işaretlendi. Kedi hakkında not aldım. Bir durum daha: ABCD gibi yanlış eşleşmeleri atlamanız gerekir, ancak ABC: TEST değil. –

1
$cat log | grep -v '\[.*\]' | grep ABC 
+0

Bu da işe yarıyor. Teşekkürler –