Использование 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 ответ1

0

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .