[英]How can I extract a number from a string if it's next to a percent symbol?
[英]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)
并且只得到100
的100%
而没有别的。 我怎样才能做到这一点?
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
这样,您可以再次使用'%'
字符来标识文本字符串中的正确字段,然后简单地将其删除,以及后面的任何内容,并且如果'%'
只出现一次,则可以确信您获得了正确的结果在您的输入行中。
试一试,如果您还有其他问题,请告诉我。
如果您可以将 'grep' 与 '-P' 选项一起使用。
grep -Po '\d+(?=%)'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.