grep не работает как положено
Я пытаюсь понять, как grep решил использовать $ в качестве регулярного выражения или в качестве символа для поиска. Мои результаты показывают, что grep непоследовательно решает, что означает $.
Таким образом, я сделал простой пример:
$ cat testfile
$illy
$unset
Здесь я хочу посмотреть, смогу ли я взять строку, оканчивающуюся на "illy", используя регулярное выражение:
$ grep 'illy$' testfile
$illy
Кажется, что это работает, и это интерпретирует критерий "illy $" как $, являющийся регулярным выражением, чтобы сказать "соответствует этому выражению в конце строки". Теперь я думаю, что grep интерпретирует $ как критерий регулярного выражения, а не как строку. Так что если я хотел попробовать grep для $ illy, то это не должно совпадать ни с чем, потому что он интерпретирует $ как регулярное выражение.
Тем не мение:
$ grep '$illy' testfile
$illy
Почему он находит эту строку? Это доказывает, что даже grep не знает, как интерпретировать символ $. Не говоря уже о себе, пытаюсь это понять.
1 ответ
grep
по умолчанию используются базовые регулярные выражения (BRE) и $
это специальный символ в BRE только в конце выражения.
Если ты хочешь grep
чтобы обработать шаблон как расширенное регулярное выражение, используйте -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