2013-04-11 10 views
7

Do mojej pracy często szukam wzorców w plikach. Generalnie używam grep --color=auto do pokolorowania wzorca wyszukiwania. Teraz, gdy szukam wielu wzorów, z których wszystkie powinny być obecne w linii, używam grep pattern1 file|grep pattern2|grep pattern3 lub awk '/pattern1/&&/pattern2'. Ale w ten sposób, w grep tracę kolorystykę, która jest dla mnie bardzo pomocna, lub w awk, nie znam żadnego sposobu na kolorowanie tylko wzoru sznurka. Kiedy staje się zbyt kłopotliwy, używam grep pattern1 file|grep pattern2|grep pattern3|grep -E "pattern1|pattern2|pattern3".Używanie kolorowego wyjścia dla awk lub grep wielokrotnego wyszukiwania i warunku

Czy jest jakiś sposób w Grep, aby wspomnieć o wielu wzorcach i stanie? (Sądzę, że wyrażenia regularne powinny go obsługiwać, ale nie mogą znaleźć żadnego, w szczególności nie ma ustalonych kolejności wzorców).

A może jest jakiś sposób na wydrukowanie wzorców wyszukiwania awk?

Wszelkie krótkie zwarte podejście jest mile widziane (dla będę używał wiele razy dziennie)

+0

zobacz moją odpowiedź na http://stackoverflow.com/a/6540890/297323 –

+0

@FredrikPihl Szukałem z wyjściem kolor awk wcześniej, wszystkie z nich faktycznie formatują pole, a nie wzór. Mogę więc zrobić drugie pole na zielono, jeśli chcę, ale nie wiem, czy mój wzór pojawi się w drugim polu lub trzecim polu. To, czego chcę, to to, że wzór powinien pojawić się na zielono, niezależnie od tego, gdzie nadchodzi. – abasu

Odpowiedz

6

Można użyć --color=always gdy potokiem z grep, aby zachować kolor:

grep pat1 --color=always | grep pat2 
+0

Dzięki @perreal, to uratowało dzień :). Ale nadal jestem ciekawa, czy jest jakiś sposób na połączenie wzorców w "i" stanie? Jeśli występuje "lub" warunek, dlaczego "i" nie ma? Nie mówię o potoku wyjściowym, ale o pojedynczym grep, który będzie szukał ciągów, które zawierają cały wzorzec, w dowolnej kolejności – abasu

+1

sposób, w jaki należy to zrobić i jest 1) orurowanie, 2) użycie czegoś takiego jak 'grep -e ' pat1. * pat2 '-e' pat2. * pat1 'input'. Być może go brakuje, ponieważ jest zbędny (nie można "lub" z rurami). – perreal

5

Można tworzyć własne shell script/function użyciu awk i uciec kodów:

Biorąc plik Awk color text dodaje wydrukuje dopasowane słowo Awk w cyjan:

$ awk '/Awk/{gsub(/Awk/,"\033[1;36m&\033[1;000m");print}' file 
Awk color test 

zasada ta może być łatwo rozszerzona do wielu wzorców dodaje This line ends here do linii jeden.

$ awk '/Awk/&&/This/{gsub(/Awk|This/,"\033[1;36m&\033[1;000m");print}' file 
Awk color test This line ends here. 

Aby uzyskać więcej informacji na temat kolorów powłoki, sprawdź numer here.

+1

Dzięki @sudo_O, wiedziałem o gsubie, ale nigdy nie myślałem o używaniu go w ten sposób. Doskonale odpowiada na drugie pytanie. – abasu