#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 для всех. Опустите » кавычки.