带有正则表达式的字符串之间的 Grep 值

Roo*_*ode 5 regex awk grep sed

$ acpi

Battery 0: Charging, 18%, 01:37:09 until charged
Run Code Online (Sandbox Code Playgroud)

如何在没有百分比字符的情况下 grep 电池电量值 (18)?

这应该可以,但我得到一个空结果:

acpi | grep -e '(?<=, )(.*)(?=%)'
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 4

您的正则表达式是正确的,但可以与Experimental -Pperl mode regex optionin一起使用gnu grep。您还需要-o仅显示匹配的文本。

正确的命令是:

grep -oP '(?<=, )\d+(?=%)'
Run Code Online (Sandbox Code Playgroud)

但是,如果您没有,gnu grep那么您也可以sed像这样使用:

sed -nE 's/.*, ([0-9]+)%.*/\1/p' file
Run Code Online (Sandbox Code Playgroud)
18
Run Code Online (Sandbox Code Playgroud)