gpt4 book ai didi

bash - 打印两个 "headers"之间的文件部分

转载 作者:行者123 更新时间:2023-11-29 09:38:25 26 4
gpt4 key购买 nike

我觉得这个问题以前肯定有人问过,但我就是找不到类似的问题。

我有一个非常简单的文件格式:

Header 1:
<multiline text>
Header 2:
<multiline text>
Header 3:
<multiline text>

其中(任意命名的)标题每个都以冒号结尾,后跟以空格缩进的文本。

例如,我想挑选出特定标题下的文本,例如“标题 2”。最明显的尝试是 grep,但我只能匹配某些行并输出固定数量的上下文行。我还研究了如何使用 sed,如下所示:

sed -ne '/Header 2:/,$p'

当然,这会打印出文件末尾的所有内容。

编辑:在实际用例中,我不一定知道“Header 2”后面的标题是什么,即使有一个(它可能是文件中的最后一个)。

最佳答案

使用 awk:

awk '!/^ /&&/:$/{p=0}p;/^Header 2:$/{p=1}' file

它是如何工作的:

  • 这个 block !/^/&&/:$/{p=0} 的意思是:如果你发现一行不是以空格开头而以冒号“:”结尾,那么将标志 p 设置为零
  • 此 block p; 表示:如果标志具有非零值,则打印当前行
  • 这个 block /^Header 2:$/{p=1} 的意思是:如果找到匹配 Header 2 的行,则设置标志 p1

这是可行的,因为未初始化的变量具有零值。

关于bash - 打印两个 "headers"之间的文件部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18469406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com