egrep regex -bash: синтаксическая ошибка около неожиданного токена `('

egrep regex -bash: синтаксическая ошибка около неожиданного токена `('

Использование egrep из командной строки с регулярным выражением не работает, и я получаю ошибку, указанную в заголовке.

egrep -rnw /var/log/usres/([a-z]+).([a-z]+)\/([a-z]+).conf/user.settings -e "pattern"

Я проверил регулярное выражение наhttps://regex101.com/r/pL5pW4/1и использовал shellcheck.net и оба говорят, что проблем нет. Я пытаюсь сопоставить определенные папки, например:

egrep -rnw /var/log/users/sd.dfr/test.conf/user.settings, so the 

"sd.dfr" и "test" в этом примере — это то, для чего нужно регулярное выражение. Чтобы сопоставить любые комбинации в них с путями к папкам. Я пробовал кавычки, экранирование, двойные кавычки. Почему это не работает?

решение1

grepпоиск регулярных выраженийв содержаниифайлов. Он не ищетфайлы, имена которых совпадаютрегулярные выражения. (Используйте findдля этого.) Кроме того, прежде чем grep увидит их, список имен файлов/каталогов, который вы предоставляете, интерпретируется оболочкой. Оболочка сопоставляет файлы, используя шарикине регулярные выражения.

Shell-шаблоны не так точны, как регулярные выражения, но следующее может подойти вам:

egrep -rnw /var/log/users/*.*/*.conf/user.settings -e "pattern"

Или, еще лучше, потому что egrepустарело:

grep -Ernw /var/log/users/*.*/*.conf/user.settings -e "pattern"

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