Это должно сработать. Добавьте имя вашего файла после этой команды:
sed -n '
/URL:/{
:addanotherrow
N
/-\{50,\}/bmatchandprint
baddanotherrow
:matchandprint
/Name(s):[^\n]*\n[^-\n]*\n[^-]/p
}
'
Некоторые пояснения:
- параметр sed "-n" предотвращает автоматическую печать пробелов в шаблонах - совпавшие шаблоны печатаются с буквой "p" в конце последнего ряда внутри скобок {}
- метки помечены ведущим ":", поэтому ":addanotherrow" и ":matchandprint" являются точками перехода для операторов "b"
- b после метки - это команда перехода к этой метке (что-то вроде GOTO)
- N добавляет следующую строку ввода в пространство шаблона
- строки, начинающиеся с "/", просто проверяют пространство шаблона на соответствие регулярному выражению, когда оно подходит, выполняется следующая команда, как уже упоминалось, b разветвляет, а p печатает пространство шаблона
Другими словами: ищется строка "URL:", с этого момента включаются дополнительные строки, пока не будет найдена строка (не менее 50 дефисов в строке). После этого просматриваются собранные строки ("пространство шаблона"). Только если найдено "Имя(имена):" с более чем одной строкой (не начинающейся с дефиса), пространство шаблона будет выведено.
Надеюсь, это поможет :-)
sed -n '
/URL:/{
:1 #return point
N #append next line
/-{20,}/!b1 #go to return point while reach ---
/Name(s):\n[^\n]\+\n[^-]/p #check if more 1 line after «Name(s)»
}
'