2009-10-17 17 views
16

Wypróbowywanydopasowując linię z dosłownym gwiazdką "*" w grep

$ echo "$STRING" | egrep "(\*)" 

a także

$ echo "$STRING" | egrep '(\*)' 

i niezliczone inne odmiany. Chcę tylko dopasować linię zawierającą literę gwiazdki w dowolnym miejscu linii.

+1

Zazwyczaj po prostu dodajemy ukośniki, dopóki nie otrzymam tego, co chcę. :) –

+2

Oba przykłady działają dla mnie (a także działają z usuniętymi nawiasami). –

Odpowiedz

16

Spróbuj klasę znaków zamiast

echo "$STRING" | egrep '[*]' 
+0

W Windowsie z GnuWin32, możesz użyć 'grep [*] file.txt'. –

+0

... chyba że masz plik o nazwie dosłownie '*' w katalogu, w którym go uruchomisz. Lekcja (nieszczególnie z tego przykładu, ale ogólnie) jest zawsze cytowania twoich wyrażeń regularnych, bez względu na to, jak trywialne. – tripleee

1

Oto jeden ze sposobów, aby dopasować dosłownego gwiazdkę:

$ echo "*" | grep "[*]" 
* 
$ echo "*" | egrep "[*]" 
* 
$ echo "asfd" | egrep "[*]" 
$ echo "asfd" | grep "[*]" 
$ 

Owijanie wyrażeniem w nawiasach zwykle pozwala łatwo uchwycić jeden znak specjalny; działa to na przykład na prawy wspornik lub łącznik.

Bądź ostrożny, gdy ten nie jest w grupie Wspornik:

$ echo "hi" | egrep "*" 
hi 
$ echo "hi" | grep "*" 
$ 
+1

Twój przykład pokazuje, dlaczego uważam, że takie zachowanie egrep irytuje. Jeśli chcesz wykonać dosłowne wyszukiwanie ciągów za pomocą grep, po prostu wpisz je w cudzysłów. Dlaczego miałbym ** ochotę na wszystko? unix nazywa ten program "kotem" ;-) Nienawidzę, że egrep zmusza cię do wstawiania znaków regex, nawet jeśli są w podwójnych cudzysłowach. Koniec rantu. Dzięki! – DaveParillo

+2

@DaveParillo: ani grep, ani egrep nie wiedzą, czy wzorzec, który je minął, został zacytowany, czy nie, ponieważ cytaty są interpretowane przez powłokę przed uruchomieniem [e] grep. Różnica wynika z tego, jak grep i egrep reagują, gdy wzorzec zaczyna się od "*", który jest technicznie zniekształcony ("*" to przyrostek). Spróbuj "grep". * "', A zobaczysz, że pasuje do wszystkiego. Jeśli chcesz przeprowadzić dosłowne (nie regex), użyj 'fgrep' zamiast tego. –

5

Zastosowanie:

grep "*" file.txt 

lub

cat file.txt | grep "*" 
+0

ponieważ możesz zrobić pierwszy, drugi z kotem nie jest konieczny. – ghostdog74

+0

Słyszę Cię. Wiele osób lubi używać kota do przesyłania plików do różnych programów, nawet jeśli jest to zwykle zbyteczne. Po prostu pomyślałem, że uwzględnię to, aby przykład wyglądał bardziej znajomo. – DaveParillo

+0

Żadna z tych czynności nie działa pod GNUWin32 w systemie Windows. – Itsme2003

1
echo "$STRING" | fgrep '*' 

fgrep służy do dopasowywania specjalny postacie.