2016-11-16 75 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

相关问题