2015-08-05 3 views
0

Я хочу grep между двумя строками, только если между ними есть узор. , например, в этом тексте: Первой нужной строкой является «Пуск», вторая - «КОНЕЦ», а шаблон - по 1 2 3 в новой строке.grep между двумя строками, если шаблон в среднем linux

Start 
abc 
abc 
1 
2 
3 
abc 
END 
bla 
bla 
Start 
abc 
abc 
1 
2 
4 
abc 
END 
bla 
bla 
Start 
abc 
abc 
1 
2 
3 
abc 
abc 
END 

результат должен быть:

Start 
abc 
abc 
1 
2 
3 
abc 
END 

Start 
abc 
abc 
1 
2 
3 
abc 
abc 
END 

спасибо!

+1

Опубликовать ваши попытки. –

ответ

0

Grep не подходит, используйте вместо СЭД

sed -n "/Start/,/END/p" input.txt

должен работать. Я принимаю вход в файл input.txt.

+0

просто отсутствует * шаблон внутри * – NeronLeVelu

2
sed -ne '/Start/{:a;N;/END/!b a;/\n1\n2\n3\n/p}' 

построчно:

нам нужен только текст, начиная с 'Start':

sed -ne '/Start/{ 

мы нашли 'Пуск', теперь добавить все до 'END' в шаблон пространства;

набор меток с именем 'а':

  :a 

добавить следующую строку шаблона:

  N 

если не найден 'END' - переход к 'в'

  /END/!b a 

теперь проверьте, есть ли у нас желаемый образец, который содержит 1 2 3 и распечатать

они будут разделены «\ n», поскольку они были на отдельных линиях.

  /\n1\n2\n3\n/p 
     }' 
+0

, когда я запускаю эту команду, я получаю: b: Событие не найдено –

+0

Эта ошибка вызвана вашим интерпретатором bash! из команды sed в качестве специального символа, вы должны использовать одинарные кавычки, как я сделал в примере команды. –