Regex 如何将正则表达式转换为在Bash脚本中工作?
我有一个Bash脚本,我试图用它提取正则表达式的匹配项并打印它 我从Bash文档中发现,可以使用变量Bash_REMATCH来获取匹配的字符串并对其进行处理,但我还没有成功地将标准正则表达式转换为与Bash兼容的正则表达式 正则表达式是Regex 如何将正则表达式转换为在Bash脚本中工作?,regex,bash,Regex,Bash,我有一个Bash脚本,我试图用它提取正则表达式的匹配项并打印它 我从Bash文档中发现,可以使用变量Bash_REMATCH来获取匹配的字符串并对其进行处理,但我还没有成功地将标准正则表达式转换为与Bash兼容的正则表达式 正则表达式是\d+(?=%)。从中提取匹配部分的字符串是 电池0:放电,XX%,YY:YY:YY剩余 我只想提取XX,即从1到100的百分比。我的正则表达式在Bash外部成功地实现了这一点,但在Bash内部它与任何内容都不匹配 以下是简化的脚本: #!/bin/bash a
\d+(?=%)
。从中提取匹配部分的字符串是
电池0:放电,XX%,YY:YY:YY剩余
我只想提取XX,即从1到100的百分比。我的正则表达式在Bash外部成功地实现了这一点,但在Bash内部它与任何内容都不匹配
以下是简化的脚本:
#!/bin/bash
acpi_out="$(/usr/bin/acpi)"
acpi_exp="\d+(?=%)"
if [[ $acpi_out =~ $acpi_exp ]]; then
echo $BASH_REMATCH[1]
else
echo "Failed to match."
fi
输出总是不匹配。
当预期为XX
时。
我已经检查了
$acpi\u out
确实是正确的字符串,但我不明白为什么在其中找不到匹配项。Bash不理解\d
,它需要[0-9]
或[[:digit:]
。而且它不支持lookaheads
如果您不仅限于bash,还可以使用其他工具,我的建议是使用grep从您的输入中提取数字
acpi_out="$(/usr/bin/acpi)"
percent=$(egrep -o '[0-9]+%' | egrep -o '^[0-9]+')
if [ -n "$percent" ]; then
echo $percent
else
echo "Failed to match."
fi
现在,您的脚本甚至可以在
sh
中运行,不再需要bash
:)您是否仅限于bash,还是可以使用外部工具,如grep
?实际上没有“标准正则表达式”之类的东西——或者说,有,但可能有数百种不同的“标准”s表示正则表达式语法,两者略有不同。