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)
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)
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)