sed:替换特定关键字之后紧邻的下一个单词

问题描述 投票:0回答:1

在 GitHub actions 中,将推送请求合并到 main 时,我想用

main
替换笔记本中出现的分支名称。

例如,给出以下行:

git clone --branch fork1 https://somrepo.git

使用下面的正则表达式,直到行尾的所有值都被替换,但是,我的目的是简单地将

fork1
替换为
main

sed -i 's/\(--branch\)\(.*\)/\1 main/'

另一个例子,给出以下行:

"https://colab.research.google.com/github/user/repo/blob/fork1/notebook.ipynb"

使用下面的正则表达式,直到行尾的所有值都被替换,但是,我的目的是简单地将

fork1/
替换为
main/

sed -i 's/\(fork1\/\)\(.*\)/\1 main\//'

regex sed github-actions command-line-interface
1个回答
0
投票

第一种情况:匹配空格,后跟一系列非空格。将非空格替换为

main

s/\(--branch\)\s\+\(\S\+\)/\1 main/

正如用户 Tripleee 所指出的,您的 sed 版本可能不支持

\s
\S
。或者您可以使用:

s/\(--branch\)[[:space:]]\+\([^[:space:]]\+\)/\1 main/

第二种情况:将

/fork1/
替换为
/main/

s#/fork1/#/main/#

注意:在这种情况下选择的替换分隔符是

#
,而不是通常首选的
/
,因此
/
不必转义。

© www.soinside.com 2019 - 2024. All rights reserved.