Скажем, у меня большой XML словарь, отформатированный примерно так:
<entry>
<!-- arbitrary amount of lines -->
<head>SomeWord</head>
<!-- arbitrary amount of lines -->
</entry>
И предположим, я знаю, что SomeWord находится на линии 3026138. Я хотел бы выполнить поиск в обратном направлении от строки 3 026 138 до <entry>
, но я не знаю, сколько строк находится между <entry>
и моей целевой линией.
Этот ответ работает правильно, если я использую номер строки, а не шаблон, как показано ниже
sed '/<entry>/h;//!H;3026138!d;x;q' file
Однако это несколько неоптимальное решение, так как я думаю, sed
сканирует строку 0 и сканирует файл в течение 3 миллион строк. Это кажется расточительным, так как я уже знаю, в какой области файла я хочу работать. В общем, это занимает около полсекунды.
У кого-нибудь есть решение, которое использует тот факт, что я в курсе номера строки, который использует обычные программы Unix / sh, которые есть у всех (например, grep, awk, sed и т. д.)?
Примечание: пожалуйста, не предлагайте использовать что-то вроде xmllint
. Он не только очень медленный, но я также хотел бы, чтобы это был сценарий метаформатности c.