-InternalBattery-0 (id=7405667) 100%; charged; 0:00 remaining present: true
我想在上面的字符串上做egrep -ow (regex)
,只得到100%
的100
,而不得到其他。我该怎么做?
sed
在一般替换形式中使用backrefere在百分号之前重新插入数字可能比grep
更可行。例如,您可以使用:
sed -E 's/^[^)]+)s+([0-9]+)%.*$/1/'
它从一开始就匹配一个或多个不是')'
的字符,然后匹配一个文字')'
,然后匹配任意数量的空白。捕获组开始捕获直到下一个'%'
的数字,并丢弃行尾的剩余字符。第一个反向参考CCD_ 9用于用在CCD_ 11中的CCD_。
示例使用/输出
$ 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+(?=%)'
您可以使用pcregrep检查字符串前面是否有一到三个带边界的数字,并提前查找百分比字符:
pcregrep --color 'b(?:100|[1-9]?d)(?=%)' file.txt
要安装pcreg,您可以从这里下载。要使用macOS终端安装它,请检查此链接