2016-07-26 61 views
0

這是我的文件。搜索特定字符串並在特定字符串之間進行打印 - Linux Shell腳本

'#### 
OutOfmemory is the error which has occured 
Log Error 
Sample 
'#### 
Incident Dump Executor 
Test 
Notinhg 
'#### 
Sample 
test 
'#### 
OutOfmemory Sample 
This is what i want 
'#### 

從這個文件,我想找到內存不足,一旦它發現我需要打印的線條beween ####

OutOfmemory發生兩次,所以我想輸出是這樣的:

'#### 
OutOfmemory is the error which has occured 
Log Error 
Sample 
'#### 

'#### 
OutOfmemory Sample 
This is what i want 
'#### 

我不想在我的輸出中留下剩餘的行。

+0

這個問題是難以辨認。如果您希望人們幫助您,請使用代碼格式設置代碼。另外,我沒有看到你問一個問題。 StackOverflow適用於精確的問題,因此您不僅必須陳述您的問題,還要說明您的方法到目前爲止,以及您遇到問題的位置。 –

+0

對不起,我現在改了 – Naresh

+0

只要算法運行,它應該足以保持運行緩衝區和「OutOfMemory」標誌。逐行讀取行,將它們添加到緩衝區中。如果它們包含「OutOfMemory」,則將該標誌設置爲true。如果它們匹配「###」,則打印整個緩衝區(如果該標誌爲真),然後將該標誌設置爲false,清除緩衝區並繼續。 –

回答

0

使用的GNU awk的,你可以這樣做:

awk -v RS="'####" 'BEGIN{ORS=RS "\n\n"} /OutOfmemory/{print RT $0}' file 

'#### 
OutOfmemory is the error which has occured 
Log Error 
Sample 
'#### 

'#### 
OutOfmemory Sample 
This is what i want 
'#### 
0

使用grep-A(之後)和-B(之前)選項,您可以指定在找到匹配之前/之前顯示多少行。 假設你的文件被命名爲foo,你可以這樣做:

cat foo | grep -i -B 1 -A 2 "OutOfmemory"