在关键字之前或之后打印行

时间:2014-11-13 20:55:04

标签: macos list awk grep

绝对的初学者在这里试图解决这个问题。相当简单的任务,但我找不到合适的解决方案。我已经知道grep是理想的,但这个问题只有足够的变量,我的基本理解无法弄明白。

我有一个文本文件,想要在某些关键字之前或之后打印行。

示例:

输入

Alpha
textfoo
text
text
qux
Beta
text
Charlie
textbar
text
text
qux
Delta
text
text
Echo
textbaz
text
text
text
qux
Foxtrot

我想打印之前关键字' foo' '杆'和' baz'以及 关键字' qux'。然而,' foo' '杆'和'巴兹'附加到文本没有像示例那样的空格。按此顺序的所需结果:

输出

Alpha
Beta
Charlie
Delta
Echo
Foxtrot

运行OSX所以没有GNU grep :( 刚刚了解了brew并安装了GNU grep :),现在这是一个选项。谢谢您的帮助!我真的很茫然。

解决方案:

awk 'n {print;n=0} /qux/ {n=1;next} /foo/ {print f} {f=$0} /bar/ {print g} {g=$0} /baz/ {print h} {h=$0}' file

1 个答案:

答案 0 :(得分:0)

您可以使用awk

awk '/foo/ && !/foobar/ {print f} {f=$0} n {print;n=0} /foobar/ {n=1}' file
Alpha
Beta
Charlie
Delta
Echo
Foxtrot

它会在包含foo但不包含foobar的行之前打印所有单词 并使用foobar

逐行打印

这也可能有用:

awk 'n {print;n=0} /foobar/ {n=1;next} /foo/ {print f} {f=$0}' file
Alpha
Beta
Charlie
Delta
Echo
Foxtrot