我在写一个使用跟踪路由的脚本。我遍历跟踪路由的每一行,然后遍历每个单词(用空格分隔)。但是,有时跟踪路由会返回*
字符,这会在回显(输出文件名)时导致问题。Bash正则表达式来检查字符串的第一个字符是否是一个数字
我一直在摆弄用正则表达式,到目前为止我已经想出了这一点:
if [[ $item =~ ^\d ]];
项目是跟踪路由的一部分。
对于跟踪路由行中的每个项目,我只想检查第一个字符是否等于数字,然后相应地继续。
我在写一个使用跟踪路由的脚本。我遍历跟踪路由的每一行,然后遍历每个单词(用空格分隔)。但是,有时跟踪路由会返回*
字符,这会在回显(输出文件名)时导致问题。Bash正则表达式来检查字符串的第一个字符是否是一个数字
我一直在摆弄用正则表达式,到目前为止我已经想出了这一点:
if [[ $item =~ ^\d ]];
项目是跟踪路由的一部分。
对于跟踪路由行中的每个项目,我只想检查第一个字符是否等于数字,然后相应地继续。
\d
不支持POSIX Regular Expressions(由Bash使用)。您需要[0-9]
来取代它,像这样:
if [[ $item =~ ^[0-9] ]];
也使用[:digit:]
,使其更易于阅读:
if [[ $item =~ ^[[:digit:]] ]];
应该是'^ [[:digit:]]' - '[:digit:]'是一个需要进入括号表达式的字符类。 –
@TomFenech对不起,这是我快速打字!更正了,谢谢! – Druzion
没有必要使用正则表达式只是glob的是足够:
[[ $item == [0-9]* ]] && echo "it starts with a digit"
您也可以使用:
[[ $item == [[:digit:]]* ]]
顺便说一句,你知道什么是更有效的Bash:球或正则表达式? –
一般来说,正则表达式被认为比glob模式慢,但我自己并没有做过任何严肃的基准测试。 – anubhava
您需要使用if [[$ item =〜^ [0-9]]];不支持','\ d'。 –
'^ [[:digit:]]'也可以工作 – rock321987
http://stackoverflow.com/questions/35894043/how-do-i-validate-that-a-version-number-is-valid-using-a -regexp-in-bash/35894180#35894180 –