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

3

我有一个网页上的行,其格式为:

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

我想将其转换为CSV格式。
"url%20%with%20spaces","description with spaces"

为了输入到一个期望外部链接格式为[url%20%with%20spaces description with spaces]的mediawiki页面(我不想让该页面被#rreplace弄乱)

sed -Ee 's`.*href="(.*)">(.*)</a>.*`"\1","\2"`'

可以分割URL,但我看不到在仅仅 \1 中做进一步空格替换为 %20 的简单方法,而不影响 \2。
1个回答

1
你可以考虑使用GNU awk,例如:
awk -F'href="|">|</a>' '{gsub(/ /, "%20",$2);print "\""$2"\",\""$3"\""}'

在线查看awk演示

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接