在正则表达式的反向引用中执行第二次替换

Performing a second replace in backreference for a regexp

我有来自表单的网页的行

<a href="url with spaces">description with spaces</a> 

我想将其转换为 csv 格式

"url%20%with%20spaces","description with spaces"

输入一个 mediawiki 页面,期望外部链接是 [url%20%with%20spaces 描述 spaces](我不希望那个页面被#rreplace)

弄得乱七八糟
sed -Ee 's`.*href="(.*)">(.*)</a>.*`"",""`'

可以拆分 url,但我看不到在不影响 \2

的情况下仅在 \1 中用 %20 进一步替换 space 的简单方法

您可能会考虑使用 GNU awk like

awk -F'href="|">|</a>' '{gsub(/ /, "%20",);print "\"""\",\"""\""}'

在线查看awk demo

这里的字段分隔符模式是href="|">|</a>,它匹配href=",或">,或 `将行拆分为字段。

第二个字段需要额外处理,所以使用gsub(/ /, "%20",)将每个space替换为%20子串。更新后的字段 2 和字段 3 用于形成结果输出。