免责声明:我得到了:
cat GUIDE.md | sed 's/{@link \([^#]*\)#\([^ ]*\)}/[\1#\2](https:\/\/mercmobily.github.io\/best-webdriver\/\1#\2/g' | less
所以,它几乎功能。
我有一个GUIDE.md文件,该文件是纯粹的markdown,但它包含JSDOC链接。
我需要扫描GUIDE.md文件并更改它们:
Remember that in {@link Browser#setAlwaysMatchKey AlwaysMatch} or {@link Browser#setRootKey} (all of the {@link Browser Browser} class), you must try [...]
分为:
Remember that in [AlwaysMatch](https://mercmobily.github.io/best-webdriver/Browser#setAlwaysMatchKey) or [Browser#setRootKey](https://mercmobily.github.io/best-webdriver/Browser#setRootKey) (all of the [Browser](https://mercmobily.github.io/best-webdriver/Browser) class), you must try [...]
基本上是这样的:
{@link Class#method Description}
->
[Description](https://mercmobily.github.io/best-webdriver/Class.html#method)
{@link Class#method}
->
[Class#method](https://mercmobily.github.io/best-webdriver/Class.html#method)
其中#method是可选的,所以:
{@link Class Description}
->
[Description](https://mercmobily.github.io/best-webdriver/Class.html)
{@link Class}
->
[Class](https://mercmobily.github.io/best-webdriver/Class.html)
此时,我起身:
cat GUIDE.md | sed 's/{@link \([^#]*\)#\([^ ]*\)}/[\1#\2](https:\/\/mercmobily.github.io\/best-webdriver\/\1#\2/g' | less
然而:
#method
不是可选的:它必须在那里。如何使其成为非强制性的?
根本不考虑该描述。这很棘手,我想知道一个SED正则表达式是否可以做到这一点。基本上,输入可以是{@link Class#method blah blah}
(链接文字应为blah blah
或{@link Class#method}
(链接文字应为Class#method
)
如果制作一个包含可选正则表达式的正则表达式太困难,我将不得不通过sed两次传递该文件。
想法?
答案 0 :(得分:2)
可以使用以下两个sed替换(可以使用换行符或;
或多个-e
表达式分隔),不知道如何使用sed中的一个替换:
sed '
s/{@link \([^} #]*\)\(#[^} #]*\)\? \([^} ]*\)}/[\3](https:\/\/mercmobily.github.io\/best-webdriver\/\1.html\2)/g
s/{@link \([^} #]*\)\(#[^} #]*\)\?}/[\1\2](https:\/\/mercmobily.github.io\/best-webdriver\/\1.html\2)/g
' << 'END'
{@link Class#method Description}
{@link Class#method}
{@link Class Description}
{@link Class}
END
注意,为了避免逃避/
,可以使用另一个分隔符,
,例如:
sed '
s,{@link \([^} #]*\)\(#[^} #]*\)\? \([^} ]*\)},[\3](https://mercmobily.github.io/best-webdriver/\1.html\2),g
s,{@link \([^} #]*\)\(#[^} #]*\)\?},[\1\2](https://mercmobily.github.io/best-webdriver/\1.html\2),g
' << 'END'
{@link Class#method Description}
{@link Class#method}
{@link Class Description}
{@link Class}
END
否则perl可以在一个
中完成perl -pe 's/\{\@link ([^} #]*)(#[^} #]*)?(?: ([^} ]*))?\}/"[".($3?$3:$1.$2)."](https:\/\/mercmobily.github.io\/best-webdriver\/$1.html$2)"/ge' << 'END'
{@link Class#method Description}
{@link Class#method}
{@link Class Description}
{@link Class}
END
请注意,表达式($3?$3:$1.$2)
可以缩短($3||$1.$2)