Как использовать sed, чтобы удалить только тройные пустые строки? - PullRequest
5 голосов
/ 11 января 2011

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

Например:

MyText.txt

line1

line2


line3



line4

с использованием sed. Я хочу, чтобы результат выглядел следующим образом MyText.txt

line1

line2


line3
line4

Мне удалось удалить двойные пустые строки с помощью

sed -i '/^$/{
N
/^\n$/D
}' MyText.txt

Однако моя цель - удалить тройные пустые строки и только тройные пустые строки.

Любая помощь будет высоко ценится.

Ответы [ 4 ]

5 голосов
/ 11 января 2011

Это так же просто, как:

sed '1N;N;/^\n\n$/d;P;D'
2 голосов
/ 26 сентября 2012

Если вы разрешите awk решения, вы можете сделать это так:

awk -v RS='\n\n\n\n' 1 Text.txt
2 голосов
/ 11 января 2011

Это не sed, но намного короче того, что вы можете сделать с помощью sed:

$ printf 'a\nb\n\nc\n\n\nd\n' | 
  perl -e 'undef $/; $_ = <>; s/\n\n\n/\n/g; print'
a
b

c
d
0 голосов
/ 11 января 2011

Следующий код удаляет только три (ни меньше, ни больше) последовательных пустых строк:

$ printf "%s\n" foo "" bar "" "" baz "" "" "" cow "" "" "" "" moe |
      sed '
        /^$/{ 
            N;
            /^\n$/{
                N;
                /^\n\n$/{
                    $ d; 
                    N;
                    s/\n\n\n\(.\)/\1/
                }
            }
        }' 
foo

bar


baz
cow




moe
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...