W this SO question jest coś, że nie mogę wyjaśnić:Dlaczego grep dopasować wszystkie linie do wzorca „ '”
grep "\'" input_file
mecze wszystkich linii w danym pliku. Czy \'
ma specjalne znaczenie dla grep?
W this SO question jest coś, że nie mogę wyjaśnić:Dlaczego grep dopasować wszystkie linie do wzorca „ '”
grep "\'" input_file
mecze wszystkich linii w danym pliku. Czy \'
ma specjalne znaczenie dla grep?
grep regex GNU extension: „\ '” dopasowuje koniec całego wejścia
\ to postać ucieczki. Oznacza to, że "należy uznać za tekst do wyszukiwania, a nie jako znak kontrolny.
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.
Dla mnie '$' i '\ '' zachowują się trochę inaczej. 'echo x | grep "$ x" 'mecze, ale' echo x | grep "\ 'x" 'nie pasuje. – theon
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'' –
Oczywiście. Słuszna uwaga. – theon
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.
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
tak, to dziwne, że grep dopasowuje wszystkie dane wejściowe dla literalnego pojedynczego cudzysłowu – perreal