【问题标题】:Splitting strings for appname and version (follow up)拆分应用名称和版本的字符串(后续)
【发布时间】:2021-12-29 13:36:50
【问题描述】:

因为在我的previous 帖子中表明我最好打开一个包含更多信息的新问题,所以我发布了这个问题。

我开始询问如何拆分下面的列表,以便将名称和版本保存为 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/-\([^-]*\)$/,\1/'sed 's/\(.*\)-\([0-9].*\)/\1,\2/'

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

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

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

appname,1.10.10-r2021-12

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

【问题讨论】:

  • 感谢您的努力,请您更清楚地提及(通过编辑您的问题)输入和预期输出示例,以便我们清楚地了解问题,谢谢。
  • 请只发布 1 个示例输入文件和 1 个相关的预期输出,不要将其分散到多个文件中,这样我们就不必进行多次复制/粘贴来测试它。
  • 输入从何而来?

标签: bash sed grep


【解决方案1】:

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

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

将您的输入转换为

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

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    相关资源
    最近更新 更多