sed和regex规则替换文本

问题描述

我有以下文字

在做任何事情之前,必须先初始化诅咒。这是通过 调用:func:`〜curses.initscr`函数,该函数将确定 终端类型,将任何所需的设置代码发送到终端,以及 创建各种内部数据结构。如果成功 :func:`initscr`返回代表整个窗口的窗口对象 屏幕;通常在名称之后称为“ stdscr” 相应的C变量。

我要替换:

:func:`〜curses。 initscr `

具有:

`initscr https://docs.python.org/3/library/curses.html#curses.initscr`_

我尝试了以下sed规则:

's@ :func:`~curses\.\(.*\)`@ `\1 <https://docs.python.org/3/library/curses.html#curses.\1>`_ @g'

但结果如下:

在做任何事情之前,必须先初始化诅咒。这是通过 调用`initscr`函数,它将确定终端 键入,将任何所需的设置代码发送到终端,然后创建 各种内部数据结构。如果成功,则执行initscr 返回代表整个屏幕的窗口对象;这是 通常称为``stdscr` `_ 在相应的C变量的名称之后。 ::

解决方法

使用

sed -E 's@ :func:`~curses\.([^`]+)`@ `\1 <https://docs.python.org/3/library/curses.html#curses.\1>`_ @g' file

请参见demo

EXPLANATION

NODE                     EXPLANATION
--------------------------------------------------------------------------------
   :func:`~curses          ' :func:`~curses'
--------------------------------------------------------------------------------
  \.                       '.'
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    [^`]+                    any character except: '`' (1 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  `                        '`'