【问题标题】:How to match all lines between the last two strings pasterns in Bash?如何匹配 Bash 中最后两个字符串粘贴之间的所有行?
【发布时间】:2015-10-29 06:32:32
【问题描述】:

我的日志文件包含一些重复的关键字,例如“开始”和“结束”,中间有几行(包括空格)。我想 grep 这两个标签之间的所有行——但仅限于最后一次递归。例如:

Start 
1

2 
End 
Start 
A B 
C 
Start 
Three 
End

结果只能是“三”

【问题讨论】:

  • 我宁愿在sedawk 中执行此操作。这可以接受吗?
  • 是的,sedawk 都符合条件。

标签: linux bash unix


【解决方案1】:

使用 awk:

awk '/Start/{s=""; p=1; next} p && /End/{p=0} p{s=s $0 ORS} END{printf "%s", s}' file
Three

或者使用tacawk

tac file | awk '/End/{p=1; next} p && /Start/{exit} p' | tac
Three

【讨论】:

  • 如果超过一行,你也需要tac结果
猜你喜欢
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 2019-02-27
  • 2014-04-27
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多