Как я могу выбрать первое вхождение между двумя образцами, включая их. Предпочтительно с помощью sed
или awk
.
Я имею:
text
something P1 something
content1
content2
something P2 something
text
something P1 something
content3
content4
something P2 something
text
Я хочу, чтобы первое вхождение линий между P1 и P2 (включая линию P1 и линию P2):
something P1 something
content1
content2
something P2 something
sed
awk
regular-expression
kofucii
источник
источник
sed
... это ошибка вsed
запущенной вами версии , а не в сценарии tbe выше./P2/q
в моей системе, так и без нее; вот и все. Мне было интересно о чем-то, и я хотел поделиться тем, что нашел.с
awk
источник
В
sed
:-n
подавляет печать по умолчанию, и вы печатаете строки между совпадающими диапазонами адресов с помощьюp
команды.q
) при первомP2
совпадении.Это не удастся, если
P2
приходит раньшеP1
. Чтобы справиться с этим делом, попробуйте:источник
Если вы хотите пропустить сами шаблоны, вот
awk
версия:источник
Более простое
awk
решение (рода- на полпути между ответом Iruvar в и ответе Мура в , но не использует переменный):и, как отметил Муру, если первый P2 появится перед первым P1, это ничего не напечатает.
Конечно, если вы хотите распечатать все диапазоны P1-P2:
просто пропустите
exit
часть:источник
Выйти сразу после печати, а не до.
источник
Чтобы пропустить сами шаблоны и показать только первый соответствующий блок в одном GNU sed:
источник