Ошибка синтаксиса Grep с правильным регулярным выражением [дубликат]

Да, вам нужен root-доступ для изменения имени пользователя, если система использует файлы passwd для аутентификации. Однако, скорее всего, доступ на вашем сайте контролируется с помощью LDAP или YP или других централизованных служб управления учетными записями

. Вам не нужен root доступ к измените свой пароль, как только вы его узнаете и вам станет доступна утилита passwd .

2
21.11.2018, 23:35
2 ответа

Как объяснил @Kusalananda explained, проблема заключается в ' внутри regex. Простым решением является использование " для regex, так как " можно экранировать даже внутри "-кавычек, в отличие от ", которые не могут быть экранированы внутри "-кавычек:

grep -rPoh "(?<=(?<!def )my_method )([\"'])(?:(?=(\\?))\2.)*?\1"
5
27.01.2020, 21:49

Ваше регулярное выражение заключено в одинарные кавычки, но также содержит одинарные кавычки.

Одиночная кавычка в ["'] должна быть экранирована, иначе она будет сигнализировать оболочке о конце строки в кавычках.

Это исправит:

grep -r -P -o -h '(?<=(?<!def )my_method )(["'\''])(?:(?=(\\?))\2.)*?\1'
#                                            ^^^^

В ["'\' '] первая ' завершает первую часть строки, \ ' вставляет буквальную одинарную кавычку, а последняя ' начинает новую строку в одинарных кавычках, которая будет объединена с предыдущими битами. Только средняя одинарная кавычка окажется в самом регулярном выражении, а две другие будет удален оболочкой.

10
27.01.2020, 21:49

Теги

Похожие вопросы