在两个分隔符之间提取和保存文本文件部分的方法是什么? 我想提取以第一次出现的字符串“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。
答案 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:
$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
这些内容file1
将FILE A
和FILE E
之间(但不包括这些行)的部分写入file3
,其余部分写入file2
。