2016-08-03 111 views
0

我是新手脚本世界。我的要求是编写一个bash脚本,它将解析'/ usr/sbin/postqueue -p'的输出并获得邮件队列数(最后一行中突出显示的数字)。多行搜索和在bash脚本中使用正则表达式

<Output of postqueue -p> 
postqueue: warning: Mail system is down -- accessing queue directly 
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------- 
9F34D414BA0A  304 Wed Aug 3 11:50:01 <sender> 
             <recipient> 

85F00414D434  304 Wed Aug 3 11:50:02 <sender> 
             <recipient> 

0C5E2414D435  303 Wed Aug 3 11:50:03 <sender> 
             <recipient> 

73C6041CCC47  304 Wed Aug 3 11:50:03 <sender> 
             <recipient> 

-- 1 Kbytes in 4 Requests. 

那么,我该如何使用grep来做一个多行搜索?当我在网上搜索时,我了解了pcregrep,但是我没有得到哪个软件包提供了二进制文件。 (我正在使用RHEL7)。我浏览了grep的手册页,但找不到任何有趣的内容。

第二个问题是,如何在bash中使用正则表达式从最后一行中提取邮件队列计数?

我得到它在Python中的工作,但我想在bash中完成这项工作,因为我将不得不修改现有脚本以使用此逻辑。

让我知道你是否有任何想法,谢谢。

+0

难道是'4'在' - 1 KBytes in 4 Requests'中,你是在? – JNevill

+2

这里没有多行。如果你想在最后一行匹配一个正则表达式,'tail -n 1 | grep regex'或者更简洁'sed -n'$/regex/p''。使用'sed'提取数字,请尝试http://stackoverflow.com/questions/11568859/how-to-extract-text-from-a-string-using-sed – tripleee

+0

感谢您的快速响应。是的,我以后4. –

回答

0

要想从最后一行要求数我会建议使用awk

/usr/sbin/postqueue -p | tail -n 1 | awk -F" " '{print $(NF-1)}' 

对于pcregrep命令,你可以使用sudo yum whatprovides pcregrep看什么软件包提供此命令

+0

感谢您的快速回复Guy Altman :)。它工作得很好:)。 pcregrep由pcre-tools-8.32-15.el7_2.1.x86_64提供。再一次感谢你 :) –