2014-11-13 2 views
0

Абсолютный новичок здесь, пытаясь понять это. Довольно простая задача, но я не смог найти правильное решение. Я узнал, что grep идеально подходит для этого, но у этой проблемы есть достаточно переменных, которые мое основное понимание не может понять.Печатать строки до или после ключевых слов

У меня есть текстовый файл и вы хотите печатать строки до или после определенных ключевых слов.

Пример:

Входной

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

Я хочу напечатать строки 'Foo' , прежде чем ключевые слова 'бар' и 'Баз' и после ключевого слова 'QUX'. Однако «foo» «bar» и «baz» прикрепляются к тексту без пробела, подобного примеру. Желаемый результат в следующем порядке:

Выход

Alpha 
Beta 
Charlie 
Delta 
Echo 
Foxtrot 

Запуск OSX так не GNU Grep :( Только узнал о заваривать и установленной 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

Вы можете проверить '-B' и' -a' варианты 'grep'. –

ответ

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 
+0

Спасибо! Но foo1 2 и 3 - фактически разные переменные. Наверное, я должен был это отразить. Отредактированные переменные для ясности. Я только что скорректировал то, что вы дали мне, и это сработало отлично! 'awk 'n {print; n = 0}/foobar/{n = 1; next}/foo1/{print f} {f = $ 0}/foo2/{print g} {g = $ 0}/foo3/{print h} {h = $ 0} 'file' По какой-то причине первый код просто висел и ничего не делал. – jaychanged

Смежные вопросы