2012-11-04 13 views
16

Chcę grep pliku z napisem, powiedz "AAA", a kończy się białymi znakami lub znakami nowego wiersza. Wiem, jak napisać to osobno, w następujący sposób, ale mając problemy z łączeniem ich (w tym sensie, że wyprowadza zarówno VVV AAA i AAA VVV).jak używać grep do dopasowania do białej lub białej linii

$echo -e "AAA VVV \nVVV AAA\nBBB" | grep "AAA$" 
>VVV AAA 
$echo -e "AAA VVV \nVVV AAA\nBBB" | grep "AAA[[:space:]]" 
>AAA VVV 

Próbowałem, używając [], ale bez powodzenia ..

Odpowiedz

18

Jeśli szukasz słowa AAA następnie miejsca w dowolnym miejscu łańcucha, lub na końcu linii, a następnie użyć

grep -P "AAA(|$)" 
2

Użyj "AAA\b", jeśli dopuszczalne jest również dopasowanie AAA, a następnie dowolnego innego znaku niealfanumerycznego. Zgodnie z grep man pages, \b dopasowuje pusty ciąg na krawędzi słowa.

$ echo -e "AAA VVV \nVVV AAA\nBBB" | grep "AAA\b" 
AAA VVV 
VVV AAA 
+2

Użycie '\ B' pasowałby również wejść takich jak' AAA-BBB' –

+0

Dzięki, masz rację. Aktualizuję moją odpowiedź. –

9

Można skorzystać z opcji grep -e aby wybrać wiele wzorów:

grep -e "AAA$" -e "AAA[[:space:]]" 

od człowieka grep:

-e PATTERN, --regexp=PATTERN 
     Use PATTERN as the pattern. This can be used to specify 
     multiple search patterns, or to protect a pattern beginning with 
     a hyphen (-). (-e is specified by POSIX.) 
Powiązane problemy