如何从shell和正则表达式中提取值



我有一个字符串" 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}'

您要查找的值在第三个字段中,并且添加零将字符串强制转换为数字,因此删除%

相关内容

  • 没有找到相关文章

最新更新