使用参数扩展从 Bash 的字符串中删除前导数字
Remove leading digits from a string with Bash using parameter expansion
初始字符串是RU="903B/100ms"
我希望从中获得 B/100ms
.
目前,我写过:
#!/bin/bash
RU="903B/100ms"
RU=${RU#*[^0-9]}
echo $RU
which returns /100ms
因为参数扩展最多删除并包括第一个非数字字符。在这种情况下,我想保留第一个非数字字符。我将如何通过修改上述文本来做到这一点?
echo "903B/100ms" | sed 's/^[0-9]*//g'
B/100ms
假设shopt -s extglob
:
RU="${RU##+([0-9])}"
您可以使用BASH_REMATCH提取想要的匹配值:
$ RU="903B/100ms"
$ [[ $RU =~ ^([[:digit:]]+)(.*) ]] && echo ${BASH_REMATCH[2]}
B/100ms
或者只捕捉想要的部分:
$ [[ $RU =~ ^[[:digit:]]+(.*) ]] && echo ${BASH_REMATCH[1]}
B/100ms
初始字符串是RU="903B/100ms"
我希望从中获得 B/100ms
.
目前,我写过:
#!/bin/bash
RU="903B/100ms"
RU=${RU#*[^0-9]}
echo $RU
which returns /100ms
因为参数扩展最多删除并包括第一个非数字字符。在这种情况下,我想保留第一个非数字字符。我将如何通过修改上述文本来做到这一点?
echo "903B/100ms" | sed 's/^[0-9]*//g'
B/100ms
假设shopt -s extglob
:
RU="${RU##+([0-9])}"
您可以使用BASH_REMATCH提取想要的匹配值:
$ RU="903B/100ms"
$ [[ $RU =~ ^([[:digit:]]+)(.*) ]] && echo ${BASH_REMATCH[2]}
B/100ms
或者只捕捉想要的部分:
$ [[ $RU =~ ^[[:digit:]]+(.*) ]] && echo ${BASH_REMATCH[1]}
B/100ms