С е Xtended сопоставление, объекты, такие как \w
, не разворачиваются внутри квадратных скобок. Поэтому их избежать:
echo sample | grep -E '\w+'
(egrep
является устаревшим псевдонимом grep -E
.)
Если вы действительно хотите использовать квадратные скобки, а затем использовать р Эрл регулярные выражения:
echo sample | grep -P '[\w]+'
(Обратите внимание, что это функция, отличная от GNU, не относящая к POSIX.)
Наконец, за ваш интерес, [\w]*
с -E
не соответствует ни слова, но он соответствует нулю или более символов. И учитывая, что по крайней мере нулевые символы содержатся в каждой строке, grep
показывает каждую строку. Сравнить:
echo another.sample | grep --color=always -E '[\w]*'
echo another.sample | grep --color=always -E '\w+'
Вы увидите, что первая команда возвращает черную строку (что означает, что она не соответствует любому символу). Второй вместо этого выделит еще один и образец, но не точку, что означает, что он правильно соответствовал двум словам. Вы также можете попробовать с grep -Eo
.
Спасибо andrea :) Это не ошибка, которая с расширенным соответствием \ w не работает? Существуют ли другие объекты, подобные \ w, которые не будут работать, когда внутри скобки? Я пробовал много искать, но не мог ссылаться на такой сценарий. – anurag86
@ anurag86: поведение не является ошибкой и описано в man-странице для grep: * Скобковое выражение представляет собой список символов, заключенных ** [** и **] **. Он соответствует любому одиночному символу в этом списке *. Если вы посмотрите, вы увидите, что символ обратной косой черты не имеет особого значения. –