如果第一个标题与源文件匹配以查找要搜索的标题,我需要提取两个标题之间的文本,例如:
&Header1
1231241241313124123213123214124123213213124124123123212
1231231231231231231231231231232131242141241241231325552
2132141241232132132132141251232132142142132132132142412
&Header2
1231241241313124123213123214124123213213124124123123212
2132141241232132132132141251232132142142132132132142412
&Header3
1231241241313124123213123214124123213213124124123123212
1231231231231231231231231231232131242141241241231325552
213214124123213213213214125123213214
还有我的源文件:
&Header1
&Header3
因此,仅检索 header1 和 3 以及以下数字信息。
答案1
startheader=$(head -1 sourcefile)
endheader=$(tail -1 sourcefile)
# above lines assume your sourcefile has two lines in it and
# each line contains the starting header and ending header
startlinenumber=$(grep -n "${startheader}" datafile|cut -d: -f1)
endlinenumber=$(grep -n "${endheader}" datafile|cut -d: -f1)
sed -n -e "${startlinenumber},${endlinenumber}p" datafile
我很确定,有一种更复杂的方法可以使用或者awk
或者perl
单个线性sed
命令来完成此操作,但我只是想明确地向您提供逻辑。您可以使用它并使其满足您的需求。