gpt4 book ai didi

regex - 更改第一个括号中后跟第三个/方括号的文本

转载 作者:行者123 更新时间:2023-12-02 02:10:49 25 4
gpt4 key购买 nike

我想在行尾附加一些文本(.html),格式为[some_text](some/other/text);基本上是 Markdown 语法中的链接。

示例

[Test](test/link) would be [Test](test/link.html)
[Test](test/link1/link) would be [Test](test/link1/link.html)
[Test] would be [Test]
(test) would be (test)

所以我尝试使用unix sed语法:sed -i 's/\[*\](*)/.html)/g' filename.md。上述 sed 语法错误并且不起作用,有人可以帮忙吗?我愿意使用其他工具,例如 awkperl,它适合这种情况。

解决方案:sed -i 's/\(\[[^][]*]([^()]*\))/\1.html)/g ' 文件名.md

由@WiktorStribiżew 建议

最佳答案

基于给定的样本:

$ cat ip.txt
[Test](test/link)
[Test](test/link1/link)
[Test]
(test)

# if closing ) should also be matched: sed -E 's/(\[[^]]+]\([^)]+)\)/\1.html)/'
$ sed -E 's/\[[^]]+]\([^)]+/&.html/' ip.txt
[Test](test/link.html)
[Test](test/link1/link.html)
[Test]
(test)
  • \[ 匹配 [
  • [^]]+ 匹配一个或多个非 ] 字符
  • ]\( 匹配 ](
  • [^)]+ 匹配一个或多个非 ) 字符
  • & 反向引用整个匹配部分
  • \1 与第一个捕获组匹配的反向引用部分

使用perl:

perl -pe 's/\[[^]]+]\([^)]+\K(?=\))/.html/'
  • \K 有助于避免捕获该点之前匹配的文本
  • (?=\)) 是匹配 ) 字符的前瞻断言,这也不是匹配部分的一部分

一旦任一解决方案按预期工作,就添加 -i 选项。

关于regex - 更改第一个括号中后跟第三个/方括号的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67773451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com