用sed解析一个字符串

时间:2015-07-10 14:00:31

标签: sed csh

我有一个像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]*\).*/\1/"`

我的正则表达式不适用于其他情况,我无法弄清楚原因!它比python的regexp语法更复杂

3 个答案:

答案 0 :(得分:1)

这适用于您输入的所有内容

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

匹配行的开头或一切到-[number].并捕获数字。

您使用的原始版本的问题是,如果没有前缀,则没有考虑到这一点。

答案 1 :(得分:0)

您可以使用此 IEnumerator enumerator = ((System.Collections.IEnumerable)(collection)).GetEnumerator(); try { while (enumerator.MoveNext()) { ...

grep -oP

RegEx Demo

答案 2 :(得分:0)

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

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

使用grep

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

-P适用于Perl正则表达式。