拆分应用程序名称和版本的字符串(跟进)

Splitting strings for appname and version (follow up)

因为在我的 post 中指出我最好打开一个包含更多信息的新问题,所以我 post 这个问题。

我开始询问如何拆分下面的列表,以便我将名称和版本作为 CSV。

appname-2021.12.24
appname2020-2021.12.23
app_name-2021.12.01
app_name2020-2021.12.02
app-name-2021.11.10
appname-2021.12.24-SNAPSHOT

在答案的帮助下,我得出了命令: sed 's/-\([^-]*\)$/,/'sed 's/\(.*\)-\([0-9].*\)/,/'

然而,事实证明列表中还有其他可能性:

app_name-10.10.0-beta-1-10
appname-1.10.10-r2021-12

两者都是逗号后的最后一个数字

app_name-10.10.0-beta-1,10
appname-1.10.10-r2021,12

我可以调整它适用于所有可能性的命令吗? 也许从文件末尾开始,select 最后一个 - (从字符串末尾看)之后的所有内容(从第一个数字开始)。 所以:

appname,1.10.10-r2021-12

我试过在命令中添加一个额外的 ^,例如: sed 's/\(.*\)-\([^0-9].*\)/,/' 稍微改变了输出,但不是我想要的

要将第一个连字符(后跟一个数字)更改为逗号,您可以使用

sed -E 's/-([[:digit:]])/,/'

将您的输入转换为

appname,2021.12.24
appname2020,2021.12.23
app_name,2021.12.01
app_name2020,2021.12.02
app-name,2021.11.10
appname,2021.12.24-SNAPSHOT
app_name,10.10.0-beta-1-10
appname,1.10.10-r2021-12