繁体   English   中英

如何从字符串中提取没有“%”符号的百分比数字?

[英]How can I extract a percentage number without the “%” symbol from a string?

-InternalBattery-0 (id=7405667) 100%; charged; 0:00 remaining present: true

我想在上面的字符串上做egrep -ow (regex)并且只得到100100%而没有别的。 我怎样才能做到这一点?

sed与反向引用以在一般替换形式中重新插入百分号之前的数字可能比grep更可行。 例如,您可以使用:

sed -E 's/^[^)]+\)\s+([0-9]+)%.*$/\1/'

从一开始就匹配一个不是')'的多个字符,然后是文字')' ,然后匹配任意数量的空格。 捕获组开始捕获直到下一个'%'数字,丢弃到行尾的剩余字符。 第一个反向引用\\1用于用([0-9+)%(...)之间捕获的内容替换整行。

示例使用/输出

$ echo "-InternalBattery-0 (id=7405667) 100%; charged; 0:00 remaining present: true" | 
sed -E 's/^[^)]+\)\s+([0-9]+)%.*$/\1/'
100

awk 解决方案

由于您在评论中提到您正在Apple Script中尝试此操作(我对此知之甚少),那么也许是一个直接的awk解决方案,它可以简单地循环查找包含'%'字符的字段,然后将所有内容从'%'到字段的末尾,打印结果并退出,例如

$ echo "-InternalBattery-0 (id=7405667) 100%; charged; 0:00 remaining present: true" | 
awk '{ for( i=1; i<=NF; i++) if ($i ~ /%/) { sub(/%.*$/,"",$i); print $i; exit }}'
100

这样,您可以再次使用'%'字符来标识文本字符串中的正确字段,然后简单地将其删除,以及后面的任何内容,并且如果'%'只出现一次,则可以确信您获得了正确的结果在您的输入行中。

试一试,如果您还有其他问题,请告诉我。

您可以使用 pcregrep 检查字符串前面是否有 1 到 3 位数字,并在前面查找百分比字符:

pcregrep --color '\b(?:100|[1-9]?\d)(?=%)' file.txt

要安装 pcreg,您可以从这里下载。 要使用 macOS 终端安装它,请检查此链接

如果您可以将 'grep' 与 '-P' 选项一起使用。

grep -Po '\d+(?=%)'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM