我有一个字符串" 12G 39G 24%/dev ";。我必须提取值24。我使用了下面的正则表达式
grep '[0-9][0-9]%' -o
但是我得到的输出是24%。我只需要24作为输出,不需要'%'字符。如何修改正则表达式脚本提取只有24作为值?
不捕获某些内容的最常见方法是使用环顾断言:像这样使用
grep -oP '[0-9][0-9](?=%)'
值得注意的是,GNU grep支持-P
选项来启用Perl兼容的regex语法,但是它不包含在OS x中。在Linux上,它将默认可用。一种变通方法是使用ack
。
但是我仍然建议在OS X上默认使用GNU grep。它可以在OSX上使用Homebrew安装,使用命令brew grep install
另外,参见如何匹配,但不捕获,正则表达式的一部分?
一种选择是对数字再次使用grep
:
grep -o '[0-9][0-9]%' | grep -o '[0-9][0-9]'
然而,如果你想用一个正则表达式来完成这个,你可以使用以下命令:
grep -Po '[0-9]{2}(?=%)'
注意本例中的-P
选项;香草grep
似乎不支持(?=%)
"环顾四周";部分。
您可以使用sed作为替代:
sed -rn 's/(^.*)([[:digit:]]{2})(%.*$)/2/p' <<< "12G 39G 24% /dev"
使用-r或-E启用正则表达式,然后将行分成3个部分,用括号表示。只替换第二部分的行,然后打印。
使用awk
:
awk '{print $3+0}'
您要查找的值在第三个字段中,并且添加零将字符串强制转换为数字,因此删除%
。