绝对的初学者在这里试图解决这个问题。相当简单的任务,但我找不到合适的解决方案。我已经知道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
答案 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