删除 bash 中的前导字符串

Mic*_*and 13 sed regular-expression

我有一个像这样的字符串rev00000010,我只想要最后一个数字,在这种情况下是 10。

我试过这个:

TEST='rev00000010'
echo "$TEST" | sed '/^[[:alpha:]][0]*/d'
echo "$TEST" | sed '/^rev[0]*/d'
Run Code Online (Sandbox Code Playgroud)

两者都没有返回,尽管正则表达式似乎是正确的(用regexr尝试

cho*_*oba 22

您传递的命令sed意味着:如果一行与正则表达式匹配,则删除它。那不是你想要的。

echo "$TEST" | sed 's/rev0*//'
Run Code Online (Sandbox Code Playgroud)

这意味着:在每一行上,删除 rev 后跟任意数量的零。

此外,你不需要sed这么简单的事情。只需使用 bash 及其参数扩展

shopt -s extglob         # Turn on extended globbing.
echo "${TEST##rev*(0)}"  # Remove everything from the beginning up to `rev`
                         # followed by the maximal number of zeroes.
Run Code Online (Sandbox Code Playgroud)


Sté*_*las 5

POSIXly:

test='rev00000010'
number=${test#"${test%%[1-9]*}"}
Run Code Online (Sandbox Code Playgroud)

将删除最左侧非零数字左侧的所有内容。

Bournely/普遍:

number=`expr "x$test" : 'xrev0*\(.*\)'`
Run Code Online (Sandbox Code Playgroud)