Я хотел бы использовать sed сценарий как это
#n
/^TODO/,/^$/p
за исключением того, что sed должен прекратить печатать диапазон после того, как он столкнется с двумя последовательными пустыми строками, а не всего одной пустой строкой. Затем это должно продолжить сканировать для следующего диапазона интереса. Другими словами, конец диапазона интереса определяется двумя пустыми строками. Я даже не уверен, что диапазон адресов может обработать этот вид требования, поэтому если существует другой способ сделать это, сообщите мне.
Это должно прекратиться при обнаружении двух последовательных пустых строк, независимо от нечетного / четного сочетания пустых и непустых строк:
Не печатать две пустые строки:
sed -n 'N;/^\n$/q;P;D'
Выведите одно из них:
sed -n 'N;/^\n$/{P;q};P;D'
Распечатайте их оба:
sed -n 'N;/^\n$/{p;q};P;D'
Правка:
И вот как вы можете заставить это работать в вашем диапазоне:
sed -n '/^TODO/,${N;/^\n$/q;P;D}'
Правка 2:
Пер данс (OP) комментарии и отредактированные требования, похоже, это помогает найти шаблон в диапазоне, который заканчивается двумя пустыми строками, несколько раз в файле:
sed -n '/^TODO/,/^$/{H;N;/^\n$/{b};p}'
Основываясь на ответе SiegeX:
cat > lines <<'EOF'
a
c
d
EOF
sed '/^$/N; /^\n$/q' lines
sed 'N;/^\n$/q;P;D'
$ cat double_blank.txt foo bar baz blah one two three
$ sed 'N;/^\n$/q;P;D' double_blank.txt foo bar baz
использовать sed для простой замены.
$ more file
1
2
blah blah
TODO
blah blah
4
5
6
7
8
9
10
11
end
$ awk -vRS="\n\n" '/TODO/{print;exit}' file
1
2
blah blah
TODO
blah blah
4
5