Regex 更改第一个括号中的文本,然后是第三个/方括号
我想在行尾附加一些文本(.html),格式为Regex 更改第一个括号中的文本,然后是第三个/方括号,regex,sed,Regex,Sed,我想在行尾附加一些文本(.html),格式为[some_text](some/other/text);基本上是标记语法中的链接 范例 [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) 所以我尝试了unixsed,语法是:sed-I的
[some_text](some/other/text)
;基本上是标记语法中的链接
范例
[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)
所以我尝试了unixsed
,语法是:sed-I的/\[*\](*)/.html)/g'filename.md
。所说的sed
语法错误且不起作用,有人能帮忙吗?我愿意使用其他工具,如awk
或perl
,它适合这种情况
解决方案:sed-i的/\(\[^][*]([^()]*\)/\1.html)/g'filename.md
@WiktorStribiżew根据给定样本建议:
$cat ip.txt
[测试](测试/链接)
[测试](测试/链接1/链接)
[测试]
(测试)
#如果关闭),也应该匹配:sed-E的/(\[[^]+]\([^]+)\)/\1.html)/'
$sed-E's/\[[^]+]\([^]+/&.html/'ip.txt
[Test](Test/link.html)
[Test](Test/link1/link.html)
[测试]
(测试)
匹配\[
[
匹配一个或多个非[^]]+
字符]
匹配]\(
](
匹配一个或多个非[^]+
字符)
反向引用整个匹配部分&
第一个捕获组匹配的反向引用部分\1
使用
perl
:
perl-pe的/\[^]+]\([^]+\K(?=\)/.html/'
有助于避免捕获在此之前匹配的文本\K
是用于匹配(?=\)
字符的先行断言,它也不是匹配部分的一部分)
-i
选项。您可以使用
sed-i的/\(\[[^][]*]([^()]*\)/\1.html)/g'filename.md
看
正则表达式是一个匹配
-第1组:\(\[[^][]*]([^()]*\)
-a\[
字符[
-除[^][]*
和[
之外的零个或多个字符]
-a]
字符]
-a(
字符(
-零个或多个字符少于[^()]*
和(
)
-a)
字符)
-i
选项在GNUsed
g
标志中作为输入文件提供的同一文件中进行替换,将查找行中的所有匹配项。一行中可以有多个匹配项吗?可能sed's/\(\[^][*]([^()]*\)/\1.html)/g'filename.md
?@Sundeep>每行只能有一个匹配项。