gpt4 book ai didi

bash - 在模式之后打印行,直到第二次出现不同的模式

转载 作者:行者123 更新时间:2023-12-02 20:43:32 25 4
gpt4 key购买 nike

所以我知道如何将线条从一种模式打印到另一种模式:

sed -ne '/pattern_1/,/pattern_2/ p'

这适用于如下所示的输入:

random_line_1
pattern_1
random_line_2
random_line_3
random_line_4
random_line_5
pattern_2
random_line_6

这样就可以打印从 pattern_1pattern_2 的行。

但是如何打印行直到第二个模式出现第二次:

random_line_1
pattern_1
pattern_2
random_line_3
random_line_4
random_line_5
pattern_2
random_line_6

我想打印从 pattern_1第二 pattern_2 的行,以便将其作为输出:

pattern_1
pattern_2
random_line_3
random_line_4
random_line_5
pattern_2

更具体地说,我试图捕获从标题开始的文本,该标题被空行包围,标题之前和第二个空行之后可能有也可能没有文本(其中pattern_1 是标题,pattern_2 是空行):

Header:
<empty line>
Some_text
Some_more_text
Even_more_text
When_will_it_stop
<empty line>

最好是 sed 答案效果最好,因为我知道一点它是如何工作的,但我愿意接受 awk 提交,只要每一个部分该命令的解释。

最佳答案

我不在要测试的机器上,但您应该能够使用 grep 及其“上下文” 开关做一些非常简单易懂的事情(-A-B-C)。

因此,要删除 pattern1 之前的所有行,只需找到 pattern1 以及 (-A) 之后的所有行:

grep -A 9999 "pattern1" YourFile

然后,在结果中搜索 pattern2 的第二次出现 (-m2) 以及之前的所有内容 (-B):

grep -A 9999 "pattern1" YourFile | grep -B 9999 -m2 "pattern2"

关于bash - 在模式之后打印行,直到第二次出现不同的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45314145/

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