Вы можете сделать это с помощью регулярного выражения. Вот строка, которую мы хотим найти:
s = %{The first line
The second line
The third line
The fourth line
The fifth line
The sixth line
The seventh line
The eight line
The ninth line
The tenth line
}
EOL для меня "\ n", но для вас это может быть "\ r \ n". Я вставлю это в константу:
EOL = '\n'
Чтобы упростить регулярное выражение, мы определим шаблон для «контекста» только один раз:
CONTEXT_LINES = 2
CONTEXT = "((?:.*#{EOL}){#{CONTEXT_LINES}})"
И мы будем искать любую строку, содержащую слово «пятый». Обратите внимание, что это регулярное выражение должно захватывать всю строку, включая конец строки, чтобы оно работало:
regexp = /.*fifth.*#{EOL}/
Наконец, выполните поиск и покажите результаты:
s =~ /^#{CONTEXT}(#{regexp})#{CONTEXT}/
before, match, after = $1, $2, $3
p before # => "The third line\nThe fourth line\n"
p match # => "The fifth line\n"
p after # => "The sixth line\nThe seventh line\n"