我有一个问题,我需要将一个站点的标记更改为另一个站点。
首先,我使用以下类型:
[[https://stackoverflow.com/][StackOverflow]]
,我需要将其更改为[StackOverflow|https://stackoverflow.com/]
。
为此,我的sed命令将为
sed -i 's/\[\[\(.*\)\]\[\(.*\)\]\]/\[\2|\1\]/g'
这仅在我有一个匹配的模式行时有效,否则它将崩溃。我应该改变什么?
答案 0 :(得分:1)
You may match any 0 or more chars using [^][]
negated bracket expression:
sed -i 's/\[\[\([^][]*\)\]\[\([^][]*\)]]/[\2|\1]/g' file
See the online sed
demo:
s="Text [[https://stackoverflow.com/][StackOverflow]] More text [[https://stackoverflow2.com/][StackOverflow2]]"
sed 's/\[\[\([^][]*\)\]\[\([^][]*\)]]/[\2|\1]/g' <<< "$s"
Output:
Text [StackOverflow|https://stackoverflow.com/] More text [StackOverflow2|https://stackoverflow2.com/]