Когда я пишу
$ grep \$
тогда все, что я печатаю на терминале, сопоставляется и печатается на терминале. Как \$
интерпретируется?
Когда я пишу
$ grep \$
тогда все, что я печатаю на терминале, сопоставляется и печатается на терминале. Как \$
интерпретируется?
Ответы:
Оболочка интерпретирует \$
и передавая ее через к Grep , как $
, в конце строки. Итак, если ваша строка имеет конец, она будет соответствовать :-)
Если вы хотите соответствовать фактическому $
в grep, используйте одно из:
grep \\\$
grep '\$'
В первом случае оболочка интерпретируется \\
как \
и \$
как $
, давая \$
. В последнем случае это вообще не интерпретируется.
Что касается вашего вопроса относительно того, почему \$
знак доллара совпадает с двухсимвольной последовательностью, то регулярные выражения, подобные тем, которые используются в grep
некоторых случаях, используют специальные символы. Вот некоторые из них:
$ end of line
^ start of line
. any character
+ 1 or more of the preceeding pattern
* 0 or more of the preceeding pattern
{n,m} between n and m of the preceeding pattern
[x-y] any character between x and y (such as [0-9] for a digit).
наряду со многими другими.
Если вы хотите сопоставить символ литерлы, который обычно рассматривается как специальный символ, вам нужно экранировать его, чтобы grep
нормальный символ.
ls \$
и увидеть, что мы получаем «ls: $: Нет такого файла или каталога», чтобы увидеть, что \ $ не экранирован в $, но \\ $ не экранирован в \ $, и так далее.
Оболочка сначала расширяет любые управляющие последовательности перед передачей аргументов в программу, поэтому он интерпретирует \$
как последовательность побега и передает один аргумент $
к grep
, который соответствует концу строки. Поскольку каждая строка имеет конец, любая строка должна совпадать :)
man grep
; было решено , что $
соответствует концу строки, независимо от того , или нет линии отделены друг от друга \n
, \r
, как, или что - то совсем другое. В общем случае регулярные выражения могут использоваться для сопоставления с любой строкой, а не только с «строкой», и $
используются для сопоставления с концом строки.
Это интерпретируется как метасимвол конца строки. Если вы хотите совпадать с реальным знаком доллара, сделайте
$ grep \\$
или
$ grep '\$'
echo \$
и затемecho \\$