2016-11-16 74 views
0

我有一個文件存在,shell腳本檢查一個段落在文件

Published 3EO's 
Save completed 
Trade saving save successful for 123 

Published 3EO's 
Save completed 
Trade saving save successful for 234 



Published 4EO's 
Save completed 
Trade saving save successful for trade 
5666688|000|b 

我的問題是我想寫一個腳本,將檢查以下段落存在或不還我想存儲的段落在一個變量中進行比較。

Published 3EO's 
Save completed 
Trade saving save successful for 123 

我寫這樣的

cat $file | grep -A 2 "Published 3EO's" 

其中$文件包含原始段落。

問題是,它返回兩個以上的值,第一段和第二段。 但我只想要一個段落,我正在尋找一場比賽。

任何幫助將不勝感激。

+5

爲什麼你有完全相同的問題(與接受的提供答案)http://stackoverflow.com/questions/40586948/shell-script-to-check-如果-A-段落流的線,存在-IN-A-文件?再次? – Inian

+0

http://stackoverflow.com/questions/3717772/regex-grep-for-multi-line-search-needed; http://stackoverflow.com/questions/2686147/how-to-find-patterns-across-multiple-lines-using-grep –

回答

1

隨着SED:

$ output=$(sed -n "/Published 3EO's/N;{/Save completed/N;{/Trade saving save successful for 123/p}}" file) 
$ echo "$output" 
Published 3EO's 
Save completed 
Trade saving save successful for 123 
+0

謝謝。有效。 –

0

您可以使用awk

awk "/Published 3EO's/ && /Save completed/ && /and so on.../" RS='' file.txt 

設置RS爲空字符串是一個特殊的功能。它會將文本分成段落。

man awk

如果RS設置爲空字符串,然後記錄 由空行分隔。當RS設置爲空字符串時,除了FS可能具有的任何值之外,換行符總是充當字段分隔符, 。

+0

雖然我沒有正確理解,但我想問一個問題。如果我必須匹配的段落是第3個或除第1個之外的什麼? –

+0

這裏打印不需要的段落。 – SLePort

+0

@RajivRai您可以使用邏輯和*和*運算符'&&'來組合多個條件。那是你要的嗎? – hek2mgl

相關問題