【问题标题】:Bash Regex to check if first character of string is a numberBash正则表达式检查字符串的第一个字符是否是数字
【发布时间】:2016-04-07 11:15:57
【问题描述】:

我正在编写一个使用跟踪路由的脚本。我遍历跟踪路由的每一行,然后遍历每个单词(由空格分隔)。但是,有时跟踪路由会返回 * 字符,这会导致回显时出现问题(输出文件名)。

我一直在摆弄 RegEx,到目前为止我想出了这个:

if [[ $item =~ ^\d ]];

项目是跟踪路径的一部分。

对于跟踪路由行中的每个项目,我只想检查第一个字符是否等于数字,然后相应地继续。

【问题讨论】:

标签: regex bash shell


【解决方案1】:

不需要使用正则表达式,只要 glob 就足够了:

[[ $item == [0-9]* ]] && echo "it starts with a digit"

你也可以使用:

[[ $item == [[:digit:]]* ]]

【讨论】:

  • 顺便说一句,你知道在 Bash 中什么更有效:glob 还是正则表达式?
  • 一般来说,正则表达式被认为比 glob 模式慢,但我自己没有做过任何认真的基准测试。
【解决方案2】:

POSIX Regular Expressions(由 Bash 使用)不支持\d。您需要将其替换为[0-9],如下所示:

if [[ $item =~ ^[0-9] ]];

查看this StackOverflow answer

也可以使用[:digit:] 使其更易于阅读:

if [[ $item =~ ^[[:digit:]] ]];

【讨论】:

  • 那应该是^[[:digit:]] - [:digit:] 是一个需要放入括号表达式的字符类。
  • @TomFenech 对不起,那是我快速打字!已更正,谢谢!
猜你喜欢
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 2017-07-24
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多