2016-08-03 4 views
0

私はスクリプティングの世界で初めてです。私の必要条件は、 '/ usr/sbin/postqueue -p'の出力を解析し、メール待ち行列数(最後の行にハイライト表示された数字)を得るbashスクリプトを書くことです。複数行の検索とbashスクリプトでのregexの使用

<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のmanページをスキミングしましたが、興味深いものは見つかりませんでした。

2番目の質問は、bashでregexを使用して最後の行からメールキューの数を抽出するにはどうすればいいですか?

私はこれをPythonで動作させましたが、私はこのロジックを使用するために既存のスクリプトを修正する必要があるため、これをbashで実行したいと思います。

ご意見ありがとうございます。ありがとうございます。

+0

を提供しているパッケージを参照してsudo yum whatprovides pcregrepを使用することができ、それは '4'あなたが後にしている「4 KBytesの1 KBytes」に? – 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

素早く対応してくれてありがとう。 「P」と出力変数があり - 無効なオプション:はい、私はその4 –

答えて

0

私はawkを使用することをお勧めし、最後の行からのリクエスト数を取得するには:pcregrepコマンドについては

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

を、あなたは、このコマンド

+0

素早い対応Guy Altman :)ありがとう。それはうまくいった:)。 pcregrepはpcre-tools-8.32-15.el7_2.1.x86_64で提供されています。もう一度ありがとうございます:) –

関連する問題