【问题标题】:Regex-based matching and sustitution with nano?基于正则表达式的匹配和替换 nano?
【发布时间】:2011-12-06 10:17:16
【问题描述】:

我知道nano 的搜索和替换功能,但它是否能够使用正则表达式进行匹配和替换(尤其是使用部分匹配的替换)?如果是这样,您能否提供一些使用的语法示例(用于匹配和替换)?

我开始学习 Perl 风格的正则表达式,但我发现文本编辑器有时会提出自己的语法。

【问题讨论】:

  • 您可以根据the nano documentation 使用-R 标志启动它。
  • @gpojd 您链接的文档已经过时了。对于所有现代操作系统附带的 nano 版本(据我所知),-R 标志用于“受限”,而不是旧版本中的“正则表达式”。

标签: regex replace nano


【解决方案1】:

我最近遇到了在以数字开头的每行开头插入文本的问题。为此,将其与我不想更改的文本区分开来的唯一方法是上一个新行。

玩弄这个答案中提供的信息,我能够做到这一点,并决定将其添加到答案中,以防其他人面临同样的情况。

搜索行首后跟一个数字,然后在以数字开头的每一行的开头插入“文本字符串”:

\ 然后 "(^[0-9])" 按进位回车,然后: "Text String 1" 按进位回车并选择是,如果它执行您想要的下一步按 a 为所有。省略 " 引号。

【讨论】:

    【解决方案2】:

    这个有点老了,只是更新了搜索索引。

    Nano 5.5 使用同一表中的 ASCII 列。

    感谢@SP Arif Sahari Wibowo,

    我还是在这里找到了答案(相同的 wiki 链接): https://en.wikipedia.org/wiki/Regular_expression#POSIX_basic_and_extended

    【讨论】:

      【解决方案3】:

      nano使用“扩展正则表达式”的正则表达式格式/表示法,即POSIX扩展正则表达式,被egrepsed -r使用,这包括元字符.[]^$()\1\9*4 和*5@5, ,?+|,以及像[:alnum:][:alpha:][:cntrl:][:digit:][:graph:][:lower:][:punct:]46@3这样的字符类987654347@、[:upper:][:xdigit:]

      有关更完整的文档,您可以查看手册页,Linux 中的 man 7 regex 或 OS X 中的 man 7 re_format。此页面也可能为您提供相同的信息:https://en.wikipedia.org/wiki/Regular_expression#POSIX_basic_and_extended

      不幸的是,在 nano 中似乎无法匹配跨越多行的任何内容。

      【讨论】:

      • +1 表示多行线索。 $1 在第二个字符串中不起作用,但 \1 可以! (对于括号中的子表达式。)\n[:newline:] 似乎都不适用于第二个字符串。
      • Nano 有自己的开始/结束命令来捕获跨越多行的组。 C 风格的块注释可以定义为:color brightblack start="/\*" end="\*/"
      【解决方案4】:

      我的 nano 版本可以选择使用 meta 字符 + R 进行正则表达式搜索。在 Windows 上的 cygwin 中,元键是 alt,所以我点击 ctrl+\ 进入搜索和替换模式,然后点击 alt+r 切换到正则表达式搜索。

      【讨论】:

      • +1 表示 alt+r。这是真正答案的一半。 @SPArifSahariWibowo 拥有更大的一半。
      • 这与 S P Arif Sahari Wibowo 的答案相结合是 IMO 的正确答案
      • 对于那些使用德语键盘的人:它是 Strg-AltGr-\ 因为你需要 AltGr 来获得反斜杠。
      • 在 Ubuntu 上,我用 ^w(搜索)然后 Alt+R 使它成为正则表达式。
      【解决方案5】:

      您需要在全局nanorc 文件中添加或取消注释以下条目(在我的机器上,它是/etc/nanorc):

      set regexp
      

      然后启动一个新终端并按 CTRL + / 并进行替换,现在应该可以识别正则表达式。

      编辑


      搜索conf->(\S+)


      替换为\1_conf


      a 替换所有匹配项:


      最终结果:

      【讨论】:

      • 谢谢巴特。我已经这样做了,但是当我知道它应该与正则表达式匹配时,我仍然收到来自 nano 的“未找到”响应。我如何将以下 Perl 正则表达式翻译成 nano 可以理解的内容? s/conf->(\S+)/$1_conf/
      • @Daniel,添加了一些屏幕截图。
      • 谢谢,这在我的 Ubuntu 机器上运行良好。不幸的是,它在我的 Mac 上不起作用。 Snow Leopard 附带的版本是 2.0.x,而 Ubuntu 使用的是最新的稳定版 (2.2.x)。我什至尝试从最新的稳定源代码编译,但仍然无法在我的 Mac 上运行正则表达式。哦,好吧...
      • 非常感谢!除了编辑配置文件,您还可以在搜索时按 Meta+R (Alt+R) 来打开/关闭正则表达式搜索。
      • 对于那些没有超级用户访问权限或不想为其他用户搞乱配置的人,请改为编辑 $HOME/.nanorc
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 2011-09-15
      相关资源
      最近更新 更多