2

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

就像是:

一些文字,等等,等等,等等:A型  
我感兴趣的文本的第 1 行  
第 2 行还有我感兴趣的文字  
第 3 行感兴趣的文本:TYPE A  
4号线越来越多  
第 5 行,现在:TYPE A  
第 6 行是:TYPE B  
第 7 行越来越多我感兴趣的文本...   
第 8 行和现在:TYPE E  
9号线啊啊啊

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

4

4 回答 4

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
于 2013-06-28T20:10:25.473 回答
4

Code for 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
于 2013-06-28T20:45:32.290 回答
4

If you have GNU awk, you can set a regular expression as the record separator. So if records are separated by "TYPE A" or "TYPE E", then you just need to print the 2nd record:

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

Again, GNU awk.

于 2013-06-28T20:45:44.293 回答
2

这可能对您有用(GNU sed):

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

这读取file1将(但不包括那些行)FILE AFILE Eto之间的部分file3和剩余的行写入到file2

于 2013-06-29T06:08:30.080 回答