Вот один способ с помощью sed
:
sed -n '/^[^[:blank:]]/b do # if line is not indented go to label do
//!{ # if line is indented and if it
/matching/H # matches, append it to hold space
}
$b do # if on last line go to label do
b # branch to end of script
: do # label do
x # exchange hold buffer w. pattern space
/\n.*matching/p # if current pattern space matches, print
' infile
Если вы хотите также распечатать строки без отступа, которые соответствуют, например, Контейнер, соответствующий материалу
, даже если ни одна из строк в блоке с отступом, который следует за совпадениями, просто измените последнее условие на / matching / p
, чтобы удалить \ n . *
и распечатайте пространство шаблонов, даже если оно содержит только одну (без отступа) строку, которая соответствует:
sed -n '/^[^[:blank:]]/b do
//!{
/matching/H
}
$b do
b
: do
x
/matching/p
' infile
Этот Github Issues кажется похожим. Судя по всему, проблема между пакетами, подготовленными для Ubuntu, и пакетами, созданными для Debian. Предлагаемый обходной путь — использовать Dockerfile, который на самом деле использует Ubuntu