Соответствие Regex и поддержка с помощью nano?

18

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

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

    
задан Daniel Standage 12.10.2011 в 21:36
источник
  • Вы можете запустить его с помощью флага -R в соответствии с документацией nano. –  gpojd 12.10.2011 в 21:56
  • @gpojd Документация, на которую вы ссылаетесь, довольно устарела. Для версии (-ов) nano, которая поставляется со всеми современными ОС (насколько я могу судить), флаг -R предназначен для «ограниченного», а не «регулярного выражения», как в старых версиях. –  Daniel Standage 12.10.2011 в 21:59

3 ответа

13

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

set regexp

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

ИЗМЕНИТЬ

Искать conf->(\S+) :

Заменить _conf

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

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

    
ответ дан Bart Kiers 12.10.2011 в 22:10
источник
  • Спасибо, Барт. Я сделал это, но я все еще получаю ответ «не найден» от nano, когда знаю, что он должен соответствовать регулярному выражению. Как бы я мог перевести следующее Perl-регулярное выражение во что-то, что nano понял бы? s / конф -> (\ S +) / $ 1_conf / –  Daniel Standage 12.10.2011 в 22:45
  • @ Даниэль, добавил несколько скриншотов. –  Bart Kiers 12.10.2011 в 22:54
  • Спасибо, это отлично поработало на моей машине Ubuntu. К сожалению, это не сработало на моем Mac. Версия, которая поставляется с Snow Leopard, - 2.0.x, тогда как Ubuntu использует последнюю стабильную версию (2.2.x). Я даже пытался скомпилировать последний стабильный исходный код, но regexp не работает на моем Mac. Ну что ж... –  Daniel Standage 12.10.2011 в 23:34
  • Большое спасибо! Вместо редактирования файла конфигурации вы также можете нажать «Мета + R» (Alt + R) во время поиска, чтобы включить / выключить поиск в регулярном выражении. –  Arno Teigseth 27.08.2015 в 16:35
17

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

ответ дан user151841 26.10.2011 в 16:28
источник
  • +1 для alt + r. Это половина реального ответа. @SPArifSahariWibowo имеет большую половину. –  BobStein-VisiBone 19.06.2013 в 16:56
  • Для тех, кто использует Mac: osxdaily.com/2013/02/01/... –  emilyk 11.02.2015 в 00:32
13

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

Для более полной документации вы можете увидеть страницу руководства, man 7 regex в Linux или man 7 re_format в OS X. Эта страница также может предоставить вам такую ​​же информацию: Ссылка

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

    
ответ дан S P Arif Sahari Wibowo 27.11.2012 в 19:59
источник
  • +1 для многострочного ключа. И $ 1 не работает во второй строке, но \ 1 делает! (Для подвыражений в скобках.) Ни \ n, ни [: newline:], похоже, не работают во второй строке. –  BobStein-VisiBone 19.06.2013 в 16:52
  • Nano имеет собственные команды запуска / завершения для захвата групп, которые охватывают несколько строк. Комментарий блока блока C может быть определен как: color brightblack start="/ \ *" end="\ * /" –  awwsmm 23.04.2018 в 10:50