【问题标题】:bash regex match or notbash 正则表达式匹配与否
【发布时间】:2023-03-14 16:06:01
【问题描述】:

我创建了这个正则表达式:

'^CPU\s+LOAD\:\s+([0-9]{1,3})\s+Average\:\s+([0-9]{1,3}).?$'

从我的字符串中匹配和提取值:

“CPU 负载:100 平均:89”

但有时这些值将不可用,例如:

“CPU 负载:平均:89”

"CPU 负载:100 平均:"

“CPU 负载:平均:”

它不会匹配,但我需要它作为占位符以在值不存在时返回“”。

所以我尝试了几件事,我认为是这样的:

'^CPU\s+LOAD\:\s+([[0-9]{1,3}]?)\s+Average\:\s+([[0-9]{1,3}]?).?$'

应该可以,但似乎不行。这是正确的语法吗?

这是我想要失败的测试代码答案 1 我点击了链接,它似乎在链接页面上工作。

rx='^CPU\s+LOAD\:\s+(?:([0-9]{1,3})\s+)?Average:(?:\s+([0-9]{1,3}))?$'
line="CPU LOAD: 89 Average: 99"
  if [[ $line =~ $rx ]]; then
    printf "\n\n${BASH_REMATCH[1]} ${BASH_REMATCH[2]}\n\n"
  else
    printf "\n\nDidn't Match\n\n"
  fi

我更新了

rx='^CPU\ +LOAD\:\ +(([0-9]{1,3})\ +)?Average:(\ +([0-9]{1,3}))?$'

和 “CPU 负载:100 平均:89”通过

“CPU 负载:平均:89”次通过

“CPU 负载:100 平均:”失败

最新的更新要求我:

 printf "\n\n${BASH_REMATCH[1]} ${BASH_REMATCH[2]} ${BASH_REMATCH[3]} ${BASH_REMATCH[4]}\n\n"

捕获所有内容并将单个值放入

${BASH_REMATCH[1]} ${BASH_REMATCH[2]}

感谢 Forth Bird 的帮助。这是满足我需求的最终代码。

rx='^CPU\s+LOAD:\s+(([0-9]{1,3})\s+)?Average:(\s+([0-9]{1,3}))?.?$'

【问题讨论】:

  • 您提到的是哪个正则表达式? Bash 正则表达式既不支持 \s 表示法也不支持 {n,m} 量词。

标签: regex bash match


【解决方案1】:

你可以做的是使用一个可选的非捕获组:

^CPU[[:blank:]]+LOAD\:[[:blank:]]+(([0-9]{1,3})[[:blank:]]+)?Average:([[:blank:]]+([0-9]{1,3}))?$

regex demo

您可以通过转义空格或使用[[:blank:]] 匹配空格或制表符来匹配空格。

rx='^CPU[[:blank:]]+LOAD\:[[:blank:]]+(([0-9]{1,3})[[:blank:]]+)?Average:([[:blank:]]+([0-9]{1,3}))?$'
line="CPU LOAD: 89 Average: 99"
if [[ $line =~ $rx ]]; then
    printf "\n\n${BASH_REMATCH[2]} ${BASH_REMATCH[4]}\n\n"
else
    printf "\n\nDidn't Match\n\n"
fi

Demo

【讨论】:

  • 我添加了一些信息。这似乎对我不起作用。我发布了我的测试代码。
  • 我使用了更新的正则表达式...它不喜欢丢失最后一个值。我将尝试 [[:blank:]] 方法... [[:blank:]] 将丢失最后一个值视为失败
  • 是否可以将 ${BASH_REMATCH[1]} ${BASH_REMATCH[2]} 中的缺失值设为空白或空值?第一个值 ${BASH_REMATCH[1]} 第二个值 ${BASH_REMATCH[2]}
  • @WesZ “CPU 负载:100 平均:”失败,因为冒号后面有一个空格。您可以将其与此 updated regex 匹配,这对您有用吗?
  • 感谢第四只鸟的帮助。多亏了你,我终于确定了这个卑鄙和精简的版本。 rx='^CPU\s+LOAD:\s+(([0-9]{1,3})\s+)?平均:(\s+([0-9]{1,3}))?.? $'
猜你喜欢
  • 1970-01-01
  • 2021-06-23
  • 2011-10-17
  • 1970-01-01
  • 2021-10-02
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多