Сопоставление и подтверждение на основе регулярных выражений на nano?

#regex #replace #nano

#регулярное выражение #заменить #nano

Вопрос:

Я знаю о nano функциональности поиска и замены, но способна ли она использовать регулярные выражения для сопоставления и подстановки (особенно замены, которые используют часть соответствия)? Если да, можете ли вы привести несколько примеров используемого синтаксиса (как для сопоставления, так и для замены)?

Я порезался на регулярных выражениях в стиле Perl, но обнаружил, что текстовые редакторы иногда придумывают свой собственный синтаксис.

Комментарии:

1. Вы можете запустить его с -R флагом в соответствии с документацией nano .

2. @gpojd Документация, на которую вы ссылаетесь, довольно устарела. Для версий nano, которые поставляются со всеми современными операционными системами (насколько я могу судить), флаг -R обозначает «ограниченный», а не «регулярное выражение», как в более старых версиях.

Ответ №1:

В моей версии nano есть возможность переключать поиск по регулярным выражениям с помощью meta символа R . В cygwin в Windows мета-ключ — это alt , поэтому я нажимаю ctrl , чтобы перейти в режим поиска и замены, а затем alt r переключаю поиск по регулярным выражениям.

Комментарии:

1. 1 для alt r. Это половина реального ответа. у @SPArifSahariWibowo большая половина.

2. Для тех, кто использует Mac: osxdaily.com/2013/02/01 /…

3. это в сочетании с ответом S P Arif Sahari Wibowo является правильным ответом, IMO

4. Для тех, у кого немецкая клавиатура: это Strg-AltGr- потому что вам нужен AltGr для получения обратной косой черты.

5. В Ubuntu я сделал ^ w (для поиска), а Alt R сделал его регулярным выражением.

Ответ №2:

Вам нужно добавить или отменить комментарий к следующей записи в вашем глобальном nanorc файле (на моем компьютере это было /etc/nanorc ):

 set regexp
  

Затем запустите новый терминал и нажмите CTRL / и выполните свои замены, которые теперь должны учитывать регулярное выражение.

Редактировать


Поиск conf->(S ) :

введите описание изображения здесь


Заменить на 1_conf

введите описание изображения здесь


Нажмите a , чтобы заменить все вхождения:

введите описание изображения здесь


Конечный результат:

введите описание изображения здесь

Комментарии:

1. Спасибо, Барт. Я сделал это, но я все еще получаю ответ «не найдено» от nano, когда я знаю, что он должен соответствовать регулярному выражению. Как бы я перевел следующее регулярное выражение Perl во что-то, что понял бы nano? s/conf->(S )/$1_conf/

2. @Daniel, добавил несколько снимков экрана.

3. Спасибо, это отлично сработало на моем компьютере с Ubuntu. К сожалению, это не сработало на моем Mac. Версия, которая поставляется со Snow Leopard, — 2.0.x, тогда как Ubuntu использует последнюю стабильную версию (2.2.x). Я даже пробовал компилировать из последнего стабильного исходного кода, но регулярное выражение по-прежнему не работает на моем Mac. Ну что ж…

4. Большое спасибо! Вместо редактирования файла конфигурации вы также можете нажать Meta R (Alt R) во время поиска, чтобы включить / выключить поиск по регулярным выражениям.

5. Для тех, у кого нет доступа суперпользователя или тех, кто не хочет портить конфигурацию для других пользователей, отредактируйте $HOME /.nanorc вместо этого

Ответ №3:

Формат / обозначение регулярного выражения для nano использует «Расширенное регулярное выражение«, т. Е. Расширенное регулярное выражение POSIX, которое используется egrep and sed -r , это включает метасимволы . , [ и ] , ^ $ ( ) , 1 9 * { , } ? , | [:alnum:] , [:alpha:] [:cntrl:] , и классы символов, такие как [:digit:] , [:graph:] , [:lower:] , [:print:] [:punct:] , [:space:] [:upper:] , [:xdigit:] ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.

Для получения более полной документации вы можете посмотреть страницу руководства, man 7 regex в Linux или man 7 re_format в OS X. Эта страница также может предоставить вам ту же информацию:https://en.wikipedia.org/wiki/Regular_expression#POSIX_basic_and_extended

К сожалению, в nano, похоже, нет способа сопоставить что-либо, охватывающее несколько строк.

Комментарии:

1. 1 за многострочную подсказку. И $1 не работает во второй строке, но 1 работает! (Для вложенных выражений в скобках.) Ни n ни [:newline:] , похоже, не работает во второй строке.

2. У Nano есть собственные команды запуска / завершения для захвата групп, которые занимают несколько строк. Комментарий к блоку в стиле C может быть определен как: color brightblack start=»/*» end=»*/»

3. Обычные классы символов, похоже, не сработали для меня. Так [:digit:] работает, пока d этого не произошло. Спасибо!

Ответ №4:

Это немного устарело, просто обновляя индекс поиска.

Nano 5.5 использует ASCII столбец из этой же таблицы.

Спасибо @S P Arif Sahari Wibowo ,

В любом случае я нашел ответ здесь (та же ссылка вики):https://en.wikipedia.org/wiki/Regular_expression#POSIX_basic_and_extended

Ответ №5:

Недавно я столкнулся с проблемой вставки текста в начале каждой строки, которая начиналась с цифровой цифры. Для этого единственным способом отличить это от текста, который я не хотел менять, была предыдущая новая строка.

Поиграв с информацией, представленной в этом ответе, я смог это сделать и решил добавить ее в ответ на случай, если кто-то другой столкнется с такой же ситуацией.

Для поиска начала строки, за которой следует число, а затем вставить «Текстовую строку» в начале каждой строки, которая начинается с числа:

затем «(^ [0-9])» нажмите «Перенос возврата», затем: «Текстовая строка 1» нажмите «Перенос возврата» и выберите «да», если он выполняет то, что вы хотите, затем нажмите a для всех. Опустите » кавычки.