首选替代方案

首选替代方案

我想找到一种简单的方法来提取字符串中直到第一个数字出现的部分(可能使用正则表达式而不是逐个字符地遍历字符串)。我正在使用它来提取rpm -qa没有版本的包名称。例如:

Parsing: perl-Text-ParseWords-3.30-1.fc22.i686
Result: perl-Text-ParseWords

答案1

首选替代方案

我们可以简单地修改rpm查询仅输出名称。

rpm -qa --queryformat "%{NAME}\n"

或者我们可以用正则表达式弄脏

不完全是“直接”,但这里有一个 sed 正则表达式应该能够做到这一点。

sed -e 's/\([^\.]*\).*/\1/;s/-[0-9]*$//' <<< "perl-Text-ParseWords-3.30-1.fc22.i686"

这应该可以处理除包名称中包含句点之外的所有内容(我什至认为这是不允许的)。

快速分解

  • s/\([^\.]*\).*/\1/在第一节课之前抓住一切。于是就perl-Text-ParseWords-3.30-1.fc22.i686变成了perl-Text-ParseWords-3

  • s/-[0-9]*$//去掉尾随-和第一个版本数字。于是就perl-Text-ParseWords-3变成了perl-Text-ParseWords

答案2

直接在bash中:

a='perl-Text-ParseWords-3.30-1.fc22.i686'
r='(^[^0-9]+)'
[[ $a =~ $r ]]

echo "${BASH_REMATCH[1]%?}"

相关内容