Regex 如何在SQL输出的最后一列下获取值

Regex 如何在SQL输出的最后一列下获取值,regex,text-processing,Regex,Text Processing,我已将SQL查询的结果通过管道传输到日志文件,但在获取“可用空间”列下的119 GB值时遇到问题 [echo] SQL*Plus: Release 11.2.0.1.0 Production on Wed Oct 1 13:39:19 2014 [echo] [echo] Copyright (c) 1982, 2010, Oracle. All rights reserved. [echo] [echo] [echo] Connected to: [echo] Oracl

我已将SQL查询的结果通过管道传输到日志文件,但在获取“可用空间”列下的119 GB值时遇到问题

 [echo] SQL*Plus: Release 11.2.0.1.0 Production on Wed Oct 1 13:39:19 2014
 [echo] 
 [echo] Copyright (c) 1982, 2010, Oracle.  All rights reserved.
 [echo] 
 [echo] 
 [echo] Connected to:
 [echo] Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
 [echo] 
 [echo] 
 [echo] Database Size        Used space       Free space
 [echo] -------------------- -------------------- --------------------
 [echo] 126 GB           7 GB         119 GB
 [echo] 
 [echo] SQL> Disconnected from Oracle Database 11g Release 11.2.0.1.0 - 64bit Production

上述输出以及其他输出(即典型的SQL输出)都存储在Ant变量中。我在获取上面文章的最后一块时遇到了问题,即在可用空间下只有119 GB。任何帮助都将不胜感激。

您仍然可以通过AWK获得此信息,尽管在编辑后,它更像是一种黑客行为:

BEGIN {
    RS = "\n"
}

/Database Size/ {
    r = NR + 2
}

(NR == r) {
    nfm1 = NF - 1
    print $nfm1, $NF
}

你应该告诉我们更多关于你的电脑是linux还是Windows?您想要Java还是Bash的答案

无论如何,该行最后GB的正则表达式为:

[0-9]+\sGB$

请在sed-n的/\[echo\]\s*\d*\sGB\s*\d*\sGB\s*\\d*\\sGB/\1/p上发布更多的line.pipe?可能吧?这是目前在windows设备上运行的,因此无法真正运行sed。我认为正则表达式可能是获取所需内容的最简单方法。我正在运行一个来自我编写的ANT脚本的批处理文件,所以一旦我将上述输出存储在日志中,我就考虑使用propertyRegex任务来获得我所需要的。然而,获得119 GB的正则表达式真的让我大吃一惊。这是在你添加contextIt之前,它在windows机器上运行的。我只是在寻找我在propertyregex ant任务中使用的正则表达式。我尝试了您在上面发布的内容,但它返回了以下内容:[echo]数据库大小已用空间可用空间[echo]-------------------[echo]126 GB 7 GB 119 GB[echo][echo]SQL>已断开与Oracle Database 11g 11.2.0.1.0版的连接-64位生产[echo]可用空间:${Free_space}我必须补充一点,我不熟悉ant taks或任何windows realted,但请尝试我更新的正则表达式。可能没有更多的方法可以做到这一点,但如果不试用您的机器,我很难知道。@Mosinel,已测试并使用egrep'[0-9]{3}\sGB$'-o或egrep'[0-9]+\sGB$'-o,考虑到您发布的内容。@ssdecontrol非常感谢!成功了。不过,在我做了那个手术之后。我关闭我的SQL实例。当这种情况发生时,它会破坏正则表达式,因为在119 GB之后有几行。有没有办法在119 GB之后忽略所有内容?我已经更新了原始帖子,加入了额外的行。它不应该破坏正则表达式。事实上并没有,因为我只是用额外的线条试过,效果很好。我刚才看到你在Windows电脑上,所以我不知道你用什么来代替egrep,我也无法解释它的行为。