ack-grep: выход символов

Моя цель состоит в том, чтобы найти все"<?="случаи с ack. Как я могу сделать это?

ack "<?="

Не работает. Скажите мне, как я могу зафиксировать выход здесь?

21
задан James A Mohler 7 December 2012 в 07:48
поделиться

3 ответа

Поскольку ack использует регулярные выражения Perl, ваша проблема связана с тем, что в языке Perl RegEx, ? - это специальный символ, означающий "последнее совпадение необязательно". Поэтому вы ищете =, которому предшествует необязательный <

Поэтому вам нужно экранировать ?, если это просто регулярный символ.

Для экранирования есть два подхода - либо <\?=, либо <[?]=; некоторые люди находят вторую форму экранирования (помещение специального символа в класс символов) более читабельной, чем backslash-escape.

UPDATE Как любезно добавил в комментарии Джош Келли, третья форма экранирования заключается в использовании оператора \Q, который экранирует все следующие специальные символы, пока не встретится \E, следующим образом: \Q

28
ответ дан 29 November 2019 в 06:27
поделиться
ack "<\?="

? является оператором регулярного выражения, поэтому необходимо экранировать

7
ответ дан 29 November 2019 в 06:27
поделиться

Вместо того чтобы пытаться запомнить, какие символы должны быть экранированы, вы можете использовать -Q для цитирования всего, что должно быть процитировано.

19
ответ дан 29 November 2019 в 06:27
поделиться
Другие вопросы по тегам:

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