使用awk或sed在页眉和页脚之间获取文本,但不包括页眉和页脚

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用awk或sed在页眉和页脚之间获取文本,但不包括页眉和页脚相关的知识,希望对你有一定的参考价值。

假设我有一个文件myfile.txt,其中包含以下内容:

1234
5678
start
stuff
stop
9871

我想获取标题'start'和页脚'stop'之间的数据,但不包括这些边框(所以在这种情况下,我的结果只是行'stuff')。使用awk和sed,我尝试了以下方法:

 awk '/start/ { show=1 } show; /stop/ { show=0 }' myfile.txt
 sed -n '/start/,/stop/p' myfile.txt

但这些包括输出中的页眉和页脚。我怎么能这样做,以便我不保留标题和脚 - 但只有中间的信息?

答案

只需颠倒测试的顺序:

$ awk '/stop/{show=0} show; /start/ { show=1 }' myfile.txt
stuff

How it works

  • /stop/{show=0} 每当我们遇到与正则表达式stop匹配的行时,我们将变量show设置为0(false)。
  • show; 如果show为true,则打印该行。 更详细地说,show是一个条件,意味着它被评估,如果是真的,则执行一个动作。由于我们没有明确指定操作,因此执行默认操作print $0。 由于没有明确指定任何操作,我们需要使用show;,以便将它与下一个命令分开。
  • /start/ { show=1 } 每当我们遇到与正则表达式start匹配的行时,我们将变量show设置为1(true)。
另一答案

随着gnu sed

sed '/start/,/stop/!d;//d' myfile.txt
另一答案

另一个sed命令,但是gnu-sed:

echo "1234
5678
start
stuff
stop
9871" | sed -n '/start/,/stop/p' | sed '1d;$d' 
stuff

编程没有问题,用另一层sed无法解决。 :)

以上是关于使用awk或sed在页眉和页脚之间获取文本,但不包括页眉和页脚的主要内容,如果未能解决你的问题,请参考以下文章

使用 AWK(或 SED)获取字符串之间的文本 - 包括 START 字符串但不包括 END 字符串

将导出查询作为带有页眉和页脚的文本访问

怎么在WORD页眉中添加页码为page1ofn?

如何在 C# VSTO Word 加载项中在页码旁边设置页眉和页脚文本?

重定向路由组件,没有页眉和页脚组件

如何从数据框中删除页眉和页脚?