Согласно документации GNU:
‘\<’ Match the empty string at the beginning of word.
‘\>’ Match the empty string at the end of word.
Мой / etc / fstab выглядит так:
/dev/sdb1 /media/fresh ext2 defaults 0 0
Я хочу, чтобы grep возвращал TRUE / FALSE для существования / media / fresh. Я пытался использовать \<
и \>
но это не сработало. Зачем?
egrep '\</media/fresh\>' /etc/fstab
Временное решение:
egrep '[[:blank:]]/media/fresh[[:blank:]]' /etc/fstab
Но это выглядит ужаснее.
Мой grep 2.5.1
grep
regular-expression
Фелипе Альварес
источник
источник
/
это не считается символом слова, поэтому регулярное выражение не будет совпадать - «\ b соответствует до и после буквенно-цифровой последовательности» точнее, чем «до и после слова»Ответы:
\<
и\>
соответствуют пустой строке в начале и конце слова соответственно, и только составляющие слова слова:От
man grep
:Итак, ваш Regex не работает, потому что
/
не является допустимым символом, составляющим слово.Вместо этого, поскольку у вас есть пробелы, вы можете использовать
-w
опцию,grep
чтобы соответствовать слову:Пример:
источник
Эта проблема с
\<
(а также\b
) относится не только к/
, но и ко всем несловесным символам. (т.е. символы, отличные от[[:alnum:]]
и_
.)Проблема в том, что механизм регулярных выражений всегда будет обходить несловарный символ, как
/
при поиске следующего якоря\<
. Вот почему вы не должны ставить несловесные символы, как/
сразу после\<
. Если вы это сделаете, по построению ничего не будет совпадать.Альтернативой
-w
опции grep будет что-то вроде этого:источник