使用 sed 解析字符串

Parsing a string with sed

我有一个像 prefix-2020.80-suffix-1 这样的字符串 以下是输入字符串

的所有可能组合
"2020.80-suffix-1"
"2020.80-suffix"
"prefix-2020.80"
"prefix-2020.80-1"

我需要剪切并分配 2020给一个变量,但无法得到我想要的输出

这是我到目前为止得到的...

set var=`echo "prefix-2020.80-suffix-1" | sed "s/[[:alnum:]]*-*\([0-9]*\).*//"`

我的正则表达式不适用于其他情况,我不知道为什么!它比 python 的正则表达式语法

更复杂

你可以使用这个grep -oP:

echo "prefix-2020.80-suffix-1" | grep -oP '^([[:alnum:]]+-)?\K[0-9]+'
2020

RegEx Demo

这应该适用于您的所有输入

sed 's/.*\(^\|-\)\([0-9]*\)\..*//' test

匹配行的开头或直到 -[number]. 的所有内容并捕获数字。

您使用的原件的问题是您没有考虑没有前缀的情况。

使用 sed(带有扩展正则表达式):

echo "prefix-2020.80-suffix-1" |sed -r 's/^([^-]*-|)([0-9]+).*//'

使用grep:

echo "prefix-2020.80-suffix-1" |grep -oP "^([^-]*-|)\K\d+"
2020

-P 用于 Perl 正则表达式。