LINUX.ORG.RU
решено ФорумAdmin

grep perl ?!

 , ,


0

1

Как использовать grep в режиме perl с последовательностью "?!"?

echo "abbbc" | grep -P "(?\!a)(.*?)c"
>> grep: unrecognized character after (? or (?-
знак "!" нужно экранировать, т.к. он зарезервирован в баше. а как его правильно экранировать?

почему мне нужен режим перл: я хожу быстренько найти где в коде не тригерится change после изменения .val у селектов, инпутов и тд. тут важны вложенные скобки. я хочу выполнить команду

grep -RPin "\.val[\s]*?(\((?:[^\(\)]++|(?1))*\))(?!\.change)" *
чтобы идти расстреливать тех, кто это сделал =)

★★

Последнее исправление: punya (всего исправлений: 2)

Ответ на: комментарий от xsektorx

не чешет. говорит

 grep: unrecognized character after (? or (?- 

punya ★★
() автор топика

регулярка-щас-расстреляю v0.1

grep -RPin '\.val[\s]*?(\((?:[^\(\)]++|(?1))+\))(?!.change)' *
=)

punya ★★
() автор топика
Ответ на: комментарий от punya

man bash

       Enclosing  characters in single quotes preserves the literal value of each character within the quotes.  A
       single quote may not occur between single quotes, even when preceded by a backslash.

       Enclosing characters in double quotes preserves the literal value of all  characters  within  the  quotes,
       with  the  exception of $, `, \, and, when history expansion is enabled, !.  The characters $ and ` retain
       their special meaning within double quotes.  The backslash retains its special meaning only when  followed
       by  one of the following characters: $, `, ", \, or <newline>.  A double quote may be quoted within double
       quotes by preceding it with a backslash.  If enabled, history expansion will  be  performed  unless  an  !
       appearing in double quotes is escaped using a backslash.  The backslash preceding the !  is not removed.

       The special parameters * and @ have special meaning when in double quotes (see PARAMETERS below).

redgremlin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.