Как \$, интерпретируемый grep?

Когда я пишу

$ grep \$  

затем независимо от того, что я ввожу на терминале, подобран и распечатан на терминале. Как \$ быть интерпретируемым?

12
задан 10.07.2012, 21:20

5 ответов

Оболочка интерпретирует \$ и передача его до 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 будет рассматривать его как обычный символ.

18
ответ дан 07.12.2019, 11:49

Оболочка сначала разворачивает любые escape-последовательности прежде, чем передать аргументы программе, таким образом, она интерпретирует \$ как escape-последовательность и передачи отдельный аргумент $ кому: grep, который соответствует концу строки. Так как каждая строка имеет конец, затем любая строка должна соответствовать :)

5
ответ дан 07.12.2019, 11:49

Это интерпретируется как метасимвол конца строки. Если Вы хотите соответствовать фактическому знаку доллара, сделать

 $ grep \\$ 

или

 $ grep '\$' 
2
ответ дан 07.12.2019, 11:49

^ для запуска строки, и $ для конца.

grep \$

или

grep $

будет соответствовать каждой строке, таким образом, на что-либо, что Вы вводите, реагируют.

Попробовать

grep a$

Теперь, только строки, последний знак которых a будет подобран и отражен.

1
ответ дан 07.12.2019, 11:49

Можно избавить от необходимости выйти, если Вы хотите искать литерал $, при помощи регулярного выражения для класса символов. Например,

$ grep '[$]' file
1
ответ дан 07.12.2019, 11:49

Теги

Похожие вопросы