grep не работает как ожидалось

Я пытаюсь понять как grep, решающий взять $ в качестве regex, или в качестве доступного для поиска символа. Мои результаты показывают, что grep несовместимо решает то, что означает $.

По сути, я сделал основной пример:

$ cat testfile
$illy
$unset

Здесь я хочу видеть, могу ли я захватить строку, заканчивающуюся в "плохо" использовании regex:

$ grep 'illy$' testfile
$illy

Это, кажется, работает, и это интерпретирует критерии 'illy$', поскольку $, являющиеся regex для высказывания ", соответствуют этому выражению в конце строки". Так мои взгляды теперь, то, что grep интерпретирует $ как regex критерии и не строка. Таким образом, если бы я хотел попытаться grep за '$illy', то затем это ничему не должно соответствовать, потому что он интерпретирует $ как regex.

Однако:

$ grep '$illy' testfile
$illy

Почему это находит эту строку? Это доказывает, что даже grep не знает, как интерпретировать символьный $. Уже не говоря о, самостоятельно пытаясь понять это.

1
задан 28 February 2019 в 16:55

1 ответ

grep Основными регулярными выражениями (BRE) использования по умолчанию, и $ специальный символ в BRE's, единственном в конце выражения.

Если Вы хотите grep для обработки шаблона как расширенного regexp использовать -E опция

-E, --extended-regexp
              Interpret PATTERN as an extended regular  expression  (ERE,  see
              below).

-

pilot6@Pilot6:~$ grep '$illy' test
$illy
pilot6@Pilot6:~$ grep -E '$illy' test
pilot6@Pilot6:~$

pilot6@Pilot6:~$ grep 'illy$' test
$illy
pilot6@Pilot6:~$ grep -E 'illy$' test
$illy
5
ответ дан 3 December 2019 в 06:36

Другие вопросы по тегам:

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