Как выбрать первое совпадение между двумя шаблонами, включая их

Как выбрать первое совпадение между двумя шаблонами, включая их. Предпочтительно использовать 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 

3 Solutions collect form web for “Как выбрать первое совпадение между двумя шаблонами, включая их”

 sed '/P1/,/P2/!d;/P2/q' 

… выполнил бы эту работу заново, разделив все линии, которые делают ! не попадают в диапазон, а затем в первый раз, когда он сталкивается с концом диапазона. Он не прерывается для P2, предшествующего P1, и для него просто не требуется специфический синтаксис для GNU.

с awk

 awk '/P1/{a=1};a;/P2/{exit}' file something P1 something content1 content2 something P2 something 

В sed :

 sed -n '/P1/,/P2/p; /P2/q' 
  • -n подавляет печать по умолчанию, и вы печатаете строки между соответствующими диапазонами адресов с помощью команды p .
  • Обычно это соответствует обоим разделам, поэтому вы выходите ( q ), когда первый P2 соответствует.

Это не сработает, если P2 появится перед P1 . Чтобы обработать этот случай, попробуйте:

 sed -n '/P1/,/P2/{p; /P2/q}' 
  • Как я могу запустить sed для замены строк в файле или делать подобные вещи в PHP?
  • Создание файла из другого файла на основе числового значения в каждой строке
  • Удалите пробелы перед определенными символами
  • awk для цикла для каждой строки в файле
  • Как искать и печатать соответствующее значение соответствия из командной строки?
  • Использование awk и grep для результатов iftop
  • замените несколько запятых на одну или несколько наборов фигурных скобок и исключение, что в одном или нескольких наборах фигурных скобок
  • Как скриптировать эту функцию массового переименования?
  • sed заменить после соответствия символа
  • Изменение конфигурационных файлов с помощью awk / sed
  • Как удалить определенное количество строк каждый раз, когда определенная строка найдена в файле
  • Interesting Posts

    Как проверить, является ли file1 префиксом file2?

    HTTPS не работает на example.com, только для www.example.com

    Как удалить конечные пробелы в конце строки в заданных файлах (более одного)?

    Не удается получить доступ к miniDLNA

    Как восстановить рабочий стол kde

    Скажите dhclient, чтобы не использовать интерфейс

    Загрузите 32-разрядную ОС из 64-разрядного GRUB2

    Как я могу запустить `hackxor` внутри VirtualBox?

    Как автоматизировать разрешение файлов на файлы, переданные из Windows в AIX, для наследования разрешений для каталогов AIX

    Может ли произвольный процесс считывать данные, поступающие в / из сетевого порта? Как?

    Синтаксис опции `offset“ e2fsck`

    Как aptitude в Debian 9 позволяет мелкозернистую очистку нового списка пакетов?

    Какова цель отложенного приостановления (Ctrl-Y) в Bash?

    Почему перезагрузка системы после долгого спящего режима?

    Почему uname -m сообщает по-разному в среде chroot и schroot?

    Linux и Unix - лучшая ОС в мире.