2016-07-26 62 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"