Найдите точное совпадение идентификатора, который всегда находится на одной строке ниже шаблона через grep

Я хотел бы знать код для grep для проверки двух совпадений один за другим. Например, у меня есть следующий текст из одного из файлов поиска:

 @<TRIPOS>MOLECULE ← pattern 1532 ← ID 17 17 SMALL NO_CHARGES 

Мне нужно найти точное соответствие идентификатора, который всегда находится на одной строке ниже шаблона, а затем получить имя файла, из которого был найден ID.

  • Как организован стек графики linux?
  • Почему apt-get удаляет только несколько kB?
  • Как просмотреть содержимое файла, который я удалил, но что процесс все еще записывает
  • Включит ли Hyper-Threading два виртуальных полускоростных процессора?
  • XFS vs Ext4 vs Others - какая файловая система стабильна и надежна для длительного запуска, например, 24/7 case
  • Изменение GID системных групп (GID 100 - 105 до 200 - 205)
  • Я использовал следующую команду:

     grep -Pzo '@<TRIPOS>MOLECULE'(?:.*\n)*?\K1532' filename 

    но я получил файлы, содержащие 1532, а также 153284. Мне нужен код для точного совпадения идентификаторов.

  • Правильно ли время системы, когда дата не установлена?
  • Ядро без MMU?
  • awk: Извлечение фиксированного числа строк, в котором последнее число строк может изменяться
  • Какой модуль для сетевой карты Intel Corporation Device 1521?
  • Конфигурация пространства постоянных сетевых пространств
  • Как я могу изменить сетевое устройство по умолчанию «ens33» на старое «eth0» на Fedora 19?
  • One Solution collect form web for “Найдите точное совпадение идентификатора, который всегда находится на одной строке ниже шаблона через grep”

    Ваша модель ищет 1532 но ничего не говорит о том, что происходит потом:

     $ printf '1532\n15321\n1532foo\n' | grep -o '1532' 1532 1532 1532 

    В зависимости от того, что вы хотите сделать, вы можете ограничить свой шаблон только совпадением перед новой строкой:

     grep -Pzo '@<TRIPOS>MOLECULE(?:.*\n)*?\K1532\n' filename 

    Или, если может быть пробел после номера до конца строки:

     grep -Pzo '@<TRIPOS>MOLECULE(?:.*\n)*?\K1532\s*\n' filename 

    В качестве альтернативы, если вы можете иметь другие вещи в одной строке, используйте \b чтобы убедиться, что число встречается до границы слова:

     grep -Pzo '@<TRIPOS>MOLECULE(?:.*\n)*?\K1532\b' filename 
    Linux и Unix - лучшая ОС в мире.