shi*_*hin 2 bash sed text-processing markdown
我正在尝试修改 markdown 文件。在一个文件中,有很多像这样的链接。
[string one](/stringtwo/#stringthree)
Run Code Online (Sandbox Code Playgroud)
我想将它们更改为以下内容:
[string one](stringtwo.html#stringthree)
Run Code Online (Sandbox Code Playgroud)
删除斜杠并添加.html
.
我尝试了以下方法:
sed -i 's/](\(\/.*\)#/](\1.html#/g' file
Run Code Online (Sandbox Code Playgroud)
但它回来了[global configuration](/config/.html#globals)
。它不会删除斜杠。
我怎样才能使用bash
or来实现这一点sed
?
这似乎可以解决问题:
$ cat 725364.in
[string one](/stringtwo/#stringthree)
[example label](/path/to/doc/#anchor)
$ sed 's_\(\[[^]]*]\)(/\([^#]*\)/\(#[^)]*\))_\1(\2.html\3)_g' 725364.in
[string one](stringtwo.html#stringthree)
[example label](path/to/doc.html#anchor)
Run Code Online (Sandbox Code Playgroud)
分解它:
首先,我使用s_needle_pin_flags
forsed
而不是s/needle/pin/flags
so 以避免转义文字/
s。
sed
将使用此表达式进行搜索\(\[[^]]*]\)(/\([^#]*\)/\(#[^)]*\))
,细分为:
\(\[[^]]*]\)
- 第 1 组的定义(链接标签):
[
]
]
(/
- 字面意义(/
\([^#]*\)
- 第 2 组(URL)的定义:
#
/
- 字面意义/
\(#[^)]*\)
- 第 3 组(锚)的定义:
#
)
)
- 字面意义)
并使用 对其进行转换\1(\2.html\3)
,分解为:
(
, 其次是.html
, 其次是)