gpt4 book ai didi

bash - 使用 Bash 从包名称中剥离版本

转载 作者:行者123 更新时间:2023-11-29 08:56:49 25 4
gpt4 key购买 nike

我正在尝试仅使用 Bash 从包名称中删除版本。我有一种解决方案,但我认为这不是最好的解决方案,所以我想知道是否有更好的方法。我所说的更好是指更清晰、更容易理解。

假设我有字符串“my-program-1.0”并且我只想要“my-program”。我目前的解决方案是:

#!/bin/bash

PROGRAM_FULL="my-program-1.0"
INDEX_OF_LAST_CHARACTER=`awk '{print match($0, "[A-Za-z0-9]-[0-9]")} <<< $PROGRAM_FULL`
PROGRAM_NAME=`cut -c -$INDEX_OF_LAST_CHARACTER <<< $PROGRAM_FULL`

实际上,“包名”语法是一个 RPM 文件名,如果它重要的话。

谢谢!

最佳答案

非常适合 sed:

# Using your matching criterion (first hyphen with a number after it
PROGRAM_NAME=$(echo "$PROGRAM_FULL" | sed 's/-[0-9].*//')

# Using a stronger match
PROGRAM_NAME=$(echo "$PROGRAM_FULL" | sed 's/-[0-9]\+\(\.[0-9]\+\)*$//')

第二个匹配确保版本号是由点分隔的数字序列(例如 X、X.X、X.X.X、...)。

编辑:因此,基于版本号的概念定义不明确这一事实,到处都有评论。您必须为您期望的输入编写一个正则表达式。希望您不会遇到像“program-name-1.2.3-a”这样糟糕的东西。尽管没有来自 OP 的任何额外请求,但我认为这里的所有答案都足够好。

关于bash - 使用 Bash 从包名称中剥离版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2899002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com