我正在尝试仅使用Bash将程序包名称中的版本信息剥离。我有一个解决方案,但我认为这并不是最好的解决方案,所以我想知道是否有更好的方法。 更好的意味着更清晰易懂。假设我有字符串“my-program-1.0”,我只想要“my-program”。我目前的解决方案是:
实际上,“包名称”语法是RPM文件名,如果这有关系的话。
谢谢!
#!/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 "s/[-0-9.]*$//"
运行它怎么样? - BCSprogram-name-3...4--789
相匹配,或者更现实地说,与program-name2-1.0
相匹配(错误地去掉了 2)。 - Cascabel