Awk 从使用sed获得的截面中获取N行

Awk 从使用sed获得的截面中获取N行,awk,sed,grep,Awk,Sed,Grep,需要您的帮助,我在应用sed后遇到了一些语法错误, 我需要选择上面的2-3行,包括我申请sed后得到的部分 请帮忙,提前谢谢。 这是我的数据 Line 1 Line 2 line 3 Line 4 Section_A blah1 blah2 blah3 blah4 Section_B Line 11 Line 12 line 13 Line 14 输出 line 3 Line 4 Section_A blah1 blah2 blah3 blah4 Section_B 这就是我迄今为止所尝试的

需要您的帮助,我在应用sed后遇到了一些语法错误, 我需要选择上面的2-3行,包括我申请sed后得到的部分

请帮忙,提前谢谢。 这是我的数据

Line 1
Line 2
line 3
Line 4
Section_A
blah1
blah2
blah3
blah4
Section_B
Line 11
Line 12
line 13
Line 14
输出

line 3
Line 4
Section_A
blah1
blah2
blah3
blah4
Section_B
这就是我迄今为止所尝试的

sed  -e '/Section_A/,/Section_B/p' test.txt
sed  -e '/Section_A/1/,/Section_B/p' test.txt

awk
救援

$ awk '/^Section_A$/{print pp; print p; f=1} f; 
       /^Section_B$/{f=0} {pp=p; p=$0}' file

line 3
Line 4
Section_A
blah1
blah2
blah3
blah4
Section_B
使用GNU时:

tag1="Section_A"
tag2="Section_B"
sed -n "/$tag1/,/$tag2/{p;d}; 1N;2N;/$tag1[^\n]*$/{h;s/\n[^\n]*$//;p;g};N;D" test.txt

来源:

您可以使用此
awk

awk'
/^节A$/{s=pp或p}
s!=“”{s=s或$0}
/^第B节$/{print s;s=”“}
{pp=p;p=$0}文件
第3行
第4行
A节
胡说八道
废话
废话
废话
B节

我有时发现从概念上来说,反转文件更容易。然后在“Section_A”后面找3行

tac文件\
|awk'
/第_B/,/第_A/{print;c=3;next}
c-->0
' \
|交咨会
第2行
第3行
第4行
A节
胡说八道
废话
废话
废话
B节

基于对您的需求的一种可能解释,使用GNU awk进行多字符RS:

$ awk -v RS='([^\n]+\n){2}Section_A.*Section_B' 'RT{print RT}' file
line 3
Line 4
Section_A
blah1
blah2
blah3
blah4
Section_B

您必须使用sed吗?如果输入中不存在
Section_B
,但
Section_A
存在,或者反之亦然,该怎么办?如果它们重叠呢?如果它们是嵌套的呢?如果它们包含regexp元字符呢?如果它们与其他文本中的子字符串匹配怎么办?什么是最快、最简单的最佳可行解决方案。。我已经用正则表达式对数据进行了分段。只有一节A和一节Bi尝试了这一节。但无法理解所使用的论点。如果可能的话,你能帮我理解所使用的论点吗?@Prayg:好的,我已经更新了我的答案。我希望这对你有帮助。谢谢。我相信它的价值$tag2@Prayag:是的,我现在已经纠正了这个错误。也许
sed-En'H;x;s/*\n(([^\n]*\n){2}(第A节)*\3B.*)$/\1/p;x'文件
?嗯,我采取了类似的方法,但唯一的区别是,如果
节B
缺失,它将一直打印到文件末尾。对,未指定,所以任何结果都是允许的。很简单,但很有效,而且都在一行中!