2012-07-28 14 views

Odpowiedz

-2

\ to postać ucieczki. Oznacza to, że "należy uznać za tekst do wyszukiwania, a nie jako znak kontrolny.

+3

Ale nawet jeśli plik tekstowy nie zawiera pojedynczego cudzysłowu, grep nadal dopasowuje wszystkie wiersze w pliku. Myślę, że o to właśnie OP mówi. – theon

+0

tak, to dziwne, że grep dopasowuje wszystkie dane wejściowe dla literalnego pojedynczego cudzysłowu – perreal

3

To jest naprawdę dziwne zachowanie grep, nie wiem jak to wyjaśnić, ale muszę pamiętać, że \' nie pasuje do żadnego znaku. Wygląda na to, że ma takie samo znaczenie jak $:

$ echo x | grep "x\'" 
x 
$ echo xy | grep "x\'" 
$ echo x | grep "\'x" 

Update 1

Jak stwierdzono w http://www.gnu.org/software/findutils/manual/html_node/find_html/grep-regular-expression-syntax.html (dzięki Richard sitze za link) to naprawdę ma takie samo znaczenie jak $. Ale tymczasem ja zauważyć różnicę między \' i $:

$ echo x | grep 'x$' 
x 
$ echo x | grep 'x$$' 
$ echo x | grep "x\'" 
x 
$ echo x | grep "x\'\'" 
x 
$ echo x | grep "x\'\'\'" 
x 

Można określić \' tyle razy, ile chcesz, ale to nie jest tak do $. Musi być tylko jeden $.

Kolejna ważna uwaga. Instrukcja mówi:

‘\'’ matches the end of the whole input 

Ale ściśle mówiąc, że nie jest to prawda, ponieważ \' mecze nie tylko koniec całego wejścia ale koniec każdej pojedynczej linii także:

$ (echo x; echo y) | grep "\'" 
x 
y 

Dokładnie jak $ robi.

+0

Dla mnie '$' i '\ '' zachowują się trochę inaczej. 'echo x | grep "$ x" 'mecze, ale' echo x | grep "\ 'x" 'nie pasuje. – theon

+3

Musisz napisać 'grep '$ x'' nie' grep "$ x" '; ponieważ '" $ x "' zostanie rozszerzone przez powłokę i '" $ x "' jest takie samo jak '''' (nic). Po prostu spróbuj 'echo" $ x "' i 'echo '$ x'' –

+0

Oczywiście. Słuszna uwaga. – theon

3

Nie znałem tej funkcji wyrażeń regularnych. Ale jest na liście regular-expressions.info jako kotwica end of the string.

Nie istnieje we wszystkich wersjach wyrażeń regularnych tylko w podstawowych i rozszerzonych wyrażeniach regularnych GNU. Więcej informacji można znaleźć w artykule compatibility chart.

Powiązane problemy