【发布时间】:2021-01-16 05:51:52
【问题描述】:
我的文件file.txt中有以下内容
Start
1
2
3
5
end
Start
a
b
c
d
end
我如何只使用 awk 来获取从“开始”到“结束”末尾的部分,如下所示?
Start
a
b
c
d
end
尝试过:
awk '/Start/ {{ f = 1;n++ }} f && n == 2; /end/ {{ f = 0 }}' file.txt
【问题讨论】:
-
如果您已经知道如何获得第一个匹配项,这里有一个获得最后一个匹配项的提示:使用
tac逐行反转输入文件,调整您的代码以获得第一个匹配项,然后使用tac再次 -
我尝试了以下命令 awk '/Start/ {{ f = 1;n++ }} f && n == 2; /end/ {{ f = 0 }}' 文件.txt
-
但我不想给出任何数字“2”,因为我可能不知道发生了多少次。
-
@Sandeep,感谢您发布您的努力,请在您的问题中添加它们,因为 cmets 不是为了展示努力,继续加油,干杯。
-
如果在输入的最后一个
end行之后有一个start行怎么办?应该打印从最后一个start到文件结尾的文本,还是打印倒数第二个start和最后一个end之间的文本块?