Как я заставляю sed печатать диапазон строк, пока он не видит двух последовательных пустых строк?

Я хотел бы использовать sed сценарий как это

#n
/^TODO/,/^$/p

за исключением того, что sed должен прекратить печатать диапазон после того, как он столкнется с двумя последовательными пустыми строками, а не всего одной пустой строкой. Затем это должно продолжить сканировать для следующего диапазона интереса. Другими словами, конец диапазона интереса определяется двумя пустыми строками. Я даже не уверен, что диапазон адресов может обработать этот вид требования, поэтому если существует другой способ сделать это, сообщите мне.

5
задан dan 21 December 2009 в 14:15
поделиться

4 ответа

Это должно прекратиться при обнаружении двух последовательных пустых строк, независимо от нечетного / четного сочетания пустых и непустых строк:

Не печатать две пустые строки:

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}'
6
ответ дан 14 December 2019 в 08:52
поделиться

Основываясь на ответе SiegeX:

cat > lines <<'EOF'
a


c
d
EOF
sed '/^$/N; /^\n$/q' lines
0
ответ дан 14 December 2019 в 08:52
поделиться
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


0
ответ дан 14 December 2019 в 08:52
поделиться

использовать 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
1
ответ дан 14 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: