Я не могу заставить grep работать правильно с регулярными выражениями

Я не могу заставить grep работать правильно с регулярными выражениями
ssh1% cat temp

sarah

saab

marrrrrrrrra

marrrrrrrtha

ssh1% grep ar*a temp

grep: No match.

Разве это не должно быть результатом?

sarah saab marrrrrra

Я пробовал использовать putty и nxclient для Windows 10.

решение1

Вы используете csh, который видит *и пытается расширить его какшар оболочкии терпит неудачу. То есть, cshздесь говорится "Нет совпадения", а не grep. В отличие отРакушки семьи Борн, cshне передаст нерасширяемый шаблон подстановки в команду, поэтому вам придется заключить его в кавычки, чтобы cshосвободить его для grep.

Я рекомендую здесь использовать одинарные кавычки, поскольку вы не пытаетесьинтерполироватьпеременную в строку:

% grep 'ar*a' temp
sarah
saab
marrrrrrrrra

Двойные кавычки также будут работать в этом случае, поскольку ваш шаблон не содержит $, но я рекомендую использовать одинарные кавычки в любом случае. Стоит выработать привычку тщательно обдумывать, какие кавычки вы используете в языках, которые позволяют использовать их полувзаимозаменяемо, таких как shell, Perl и т. д. Нам здесь не нужна интерполяция строк, поэтому мы решим не использовать стиль кавычек, который ее допускает.

Кстати, вам следует также цитировать шаблоны RE под оболочками семейства Bourne. Как намекает Майк Вагнер в своем комментарии выше, потому что регулярные выражения и шаблоны globиспользуйте многие из тех же специальных символов, иногда можно написать шаблон RE, который простослучаетсятакже соответствует некоторым файлам, и поэтому неожиданно расширяется оболочкой.

Связанный контент