2012-04-05 20 views
7

W poniższym przykładzie muszę odfiltrować tylko wiersz zawierający "ABC", pomijając wiersze pasujące do "ABC", które zawierają nawiasy kwadratowe:Potrzebujesz pomocy RegExp dla polecenia Linux Bash grep, aby odfiltrować linie zawierające nawiasy kwadratowe

 
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 

Oto co mam, ale do tej pory nie jestem w stanie skutecznie odfiltrować wiersze z nawiasami kwadratowymi:

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

Proszę pomóc?

+0

+1 do wprowadzania próbki, jasne wyjaśnienie pożądanym wyjściem I trochę próbki kod! Powodzenia. – shellter

Odpowiedz

3

Edited na podstawie opinii:

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

Wejście:

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 

wyjściowa:

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

Jeśli to działa dla Ciebie, czy mógłbyś zaznaczyć odpowiedź jako poprawną? Dzięki! – GetSet

+0

uwaga, nie trzeba do kota Metrics.log, po prostu podaj to jako dane wejściowe do 1. grep. grep -i 'ABC' Metrics.log | grep -v "[[]]' ' – matchew

+0

Dzięki. Oznaczono jako odpowiedź. Zwrócił uwagę na kota. Jeszcze jeden przypadek: trzeba pominąć fałszywe dopasowania, takie jak ABCD, ale nie ABC: TEST. –

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

To działa również. Dzięki –

Powiązane problemy