我有一个看起来像这样的文本文件:
我希望只获取-+-模式之间的行,因此它将返回:
只要“开始文本”和“结束文本”是不同的模式,就可以很好地工作。
但令人遗憾的是,我需要的“开始文本”和“结束文本”可能会改变。这两行中唯一一致的部分是“-+-”。文件中的所有其他文本都可能完全不同;我不能依赖任何一致的模式。唯一可靠的文本是 -+- 。当两个字符串相同时,awk 失败了。
有没有什么想法可以返回两个离散实例之间的行,而不包括包含模式的行?不一定要使用 awk,只要是在 bash shell 脚本中能工作的东西即可。
-+- beginning text
hey there
hi there
ho there
-+- ending text
other stuff
that is
immaterial for
my purposes
我希望只获取-+-模式之间的行,因此它将返回:
hey there
hi there
ho there
标准的awk方式:
awk '/beginning text/ {flag=1;next} /ending text/ {flag=0} flag {print}'
只要“开始文本”和“结束文本”是不同的模式,就可以很好地工作。
但令人遗憾的是,我需要的“开始文本”和“结束文本”可能会改变。这两行中唯一一致的部分是“-+-”。文件中的所有其他文本都可能完全不同;我不能依赖任何一致的模式。唯一可靠的文本是 -+- 。当两个字符串相同时,awk 失败了。
有没有什么想法可以返回两个离散实例之间的行,而不包括包含模式的行?不一定要使用 awk,只要是在 bash shell 脚本中能工作的东西即可。
{print}
部分,因为flag
评估为True将使awk
执行其默认操作:print
。 - fedorquiawk '/Matches/ { flag=!flag; count+=1; next } flag && count < 2 {print}'
- Murali Suriar