2012-04-17 18 views
21

Próbuję automatycznie usunąć wszystkie wiersze z pliku tekstowego, który zawiera literę "T", po której nie następuje bezpośrednio "H". Używam grep i wysyłam dane wyjściowe do innego pliku, ale nie mogę wymyślić magicznego wyrażenia regularnego, które pomoże mi to zrobić.Grep Regex: Lista wszystkich linii z wyjątkiem

Nie mam nic przeciwko używaniu awk, sed lub innego narzędzia linux, jeśli grep nie jest odpowiednim narzędziem do użycia.

Odpowiedz

51

To powinno zrobić:

grep -v 'T[^H]' 

-v: wypisywanie linii nie pasujące

[^ H]. Dopasowuje dowolny znak, ale H

+2

Obie instancje '*' nie są konieczne , grep skanuje całe linie w poszukiwaniu dopasowania. –

+0

Dziękuję za uwagę. Zmieniono to, aby to odzwierciedlić. – byrondrossos

9

można zrobić:

grep -v 'T[^H]' input 

-v jest opcja odwrotna mecz grep nie notować linie, które pasują do wzorca.

Użyte wyrażenie to T[^H], które pasuje do wszystkich linii, które jako T, po których następuje dowolny znak inny niż H.

Powiązane problemy