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

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

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

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

Я использовал следующую команду:

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

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

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 
  • Grep и отсортировать несколько несортированных вещей в нескольких строках (в одном документе)
  • Объединение двух CSV по сравнению только с определенным столбцом
  • tr жалоб на «Неверная последовательность байтов»
  • Как выводить строки файла после поиска и grep?
  • Grep, которые содержат «1111-11-11» или «2382-21-20». (Любые номера)
  • grep --color = auto breaks, когда ^ M находится внутри цветного соответствия
  • Как я могу использовать sed, чтобы отрезать строку от строки?
  • grep для заглавных слов
  • AWK Поиск массивного файла и запись в имя переменной
  • Получить каждый столбец, который содержит несколько пробелов?
  • Извлечь определенное значение из блока данных
  • grep заботится о расширении .dat?
  • Interesting Posts

    монтировать через дополнение fuseiso9660; 1 к именам файлов

    Могу ли я установить FreeBSD, OpenBSD, NetBSD и DragonFly на один диск?

    Терминальное имя pty в соответствии с IP-адресом источника

    Запрос на отображение файлов UNIX, созданных на определенную метку времени

    Ключ, отличный от Control для отправки SIG *?

    Проблема с небольшим сценарием bash

    как добавить эти 3 строки в качестве переменных окружения в файл .profile bash

    Какой процесс создал это окно X11?

    Запуск gnome-keyring-daemon в CentOS?

    Procmail распознает электронные письма, которые уже были скопированы в папку

    Разница между учетной записью root и административной учетной записью

    Настройки Mint Linux изменены автоматически

    Учитывая vmlinuz и initrd.gz, как узнать, откуда ядро ​​загружается / (корневая) файловая система?

    Может ли монитор отслеживать другие компьютеры Linux в сети?

    Как grep наиболее часто встречающиеся сообщения об ошибках в файле журнала unix

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