Я работаю с файлами XML, содержащими данные книги. При расследовании проблем с повреждением данных мне часто приходится извлекать целые записи, которые включают определенную строку.
Я изо всех сил пытаюсь сделать это из-за моих очень ограниченных знаний сценариев bash и полного отсутствия знаний о других языках программирования, таких как perl.
У меня есть стандартный доступ пользователей к Linux-блокам (RHEL 4) без возможности получить разрешение на установку чего-либо, чего еще не было.
Используя стандартные инструменты / языки, доступные в этом поле, кто-нибудь может объяснить, как я могу искать конкретную строку и извлечь какие-либо целые записи из файла, который может содержать ее?
например. извлечь целые записи, которые содержат «Смит», из следующего файла.
Пример данных:
<File>
<Product>
<Ref>1</Ref>
<Title>My Life</Title>
<Series>Life Stories</Series>
<Author>John Smith</Author>
<Price>5.99</Price>
</Product>
<Product>
<Ref>2</Ref>
<Title>A Story</Title>
<Author>Fred Bloggs</Author>
<Price>16.99</Price>
</Product>
<Product>
<Ref>3</Ref>
<Title>Book 1</Title>
<Author>Jane Smith</Author>
<Price>10.99</Price>
</Product>
</File>
Требуемый вывод:
<Product>
<Ref>1</Ref>
<Title>My Life</Title>
<Series>Life Stories</Series>
<Author>John Smith</Author>
<Price>5.99</Price>
</Product>
<Product>
<Ref>3</Ref>
<Title>Book 1</Title>
<Author>Jane Smith</Author>
<Price>10.99</Price>
</Product>
То есть все между тегами <Product>
</Product>
для записей, содержащих строку «Смит».
Записи могут содержать различное количество тегов, но всегда будут заключены в теги <Product>
</Product>
.
Я ценю, что идеальный результат может быть невозможен каждый раз без использования более специализированных инструментов, но у меня просто нет их в наличии. Все, что сблизит меня, было бы замечательно.
Я думаю, что сценарий будет читать каждую запись в файле, искать строку в каждой записи по очереди и перенаправлять те записи, которые соответствуют выводу. Однако я изо всех сил пытаюсь найти ответ где угодно.
Большое спасибо за любую помощь, которую вы можете предложить.
Дэнни