从文本文件中的重复范围模式中获取特定行

时间:2013-06-28 20:07:22

标签: regex sed awk pattern-matching range

在两个分隔符之间提取和保存文本文件部分的方法是什么? 我想提取以第一次出现的字符串“TYPE A” 开头的部分,以第一次出现的“TYPE E”结束。 < / p>

类似的东西:

Some text, blah, blah, blah : TYPE A  
line 1 of text of my interest  
line 2 more text of my interest  
line 3 text of interest: TYPE A  
line 4 more and more  
line 5 more, now: TYPE A  
line 6 here is: TYPE B  
line 7 more and more text of my interest ...   
line 8 and now: TYPE E  
line 9 blah blah

即。我想将这两个分隔符之间的任何保存到另一个文件中 - 首先TYPE A包括所有后续分隔符和第一个TYPE E。它可以排除或包含这两个,因为我真的很想进一步处理它们之间的内容。 我想使用sed或类似的实用程序,我可以在OSX或Linux上找到它,但不是Perl。

4 个答案:

答案 0 :(得分:4)

使用awk

awk '/TYPE A/{p=1;next}/TYPE E/{print $0;p=0}p' inputFile > outputFile

<强>输出

$ awk '/TYPE A/{p=1;next}/TYPE E/{print $0;p=0}p' inputFile
line 1 of text of my interest
line 2 more text of my interest
line 3 more and more text of my interest ... : TYPE E

答案 1 :(得分:4)

GNU代码

$sed '/TYPE A/,/TYPE E/!d;{/TYPE A/d}' file
line 1 of text of my interest
line 2 more text of my interest
line 3 more and more text of my interest ... : TYPE E

答案 2 :(得分:4)

如果您有GNU awk,则可以将正则表达式设置为记录分隔符。因此,如果记录由“TYPE A”或“TYPE E”分隔,那么您只需要打印第二条记录:

gawk -v RS='TYPE [AE]' 'FNR == 2' filename

再次,GNU awk。

答案 3 :(得分:2)

这可能适合你(GNU sed):

sed -e '/TYPE A/,/TYPE E/{//!{wfile3' -e 'd}}' file1 >file2

这些内容file1FILE AFILE E之间(但不包括这些行)的部分写入file3,其余部分写入file2