Wie ersetze ich mehrere Leerzeilen durch eine bestimmte nicht leere Zeile?

Wie ersetze ich mehrere Leerzeilen durch eine bestimmte nicht leere Zeile?

Die Beispieleingabe ist

1
2
3


4
5



6
7
8



9

Das erwartete Ergebnis ist

1
2
3
---
4
5
---
6
7
8
---
9

Antwort1

Ein Weg:

cat -s file | sed 's/^$/---/'

Aus der Manpage von cat:

   -s, --squeeze-blank
          never more than one single blank line

Sobald catdie Leerzeilen ausgequetscht sind, sedersetzt man das Leerzeichen durch ein---

Antwort2

Ein POSIX-kompatibler Ansatz unter Verwendung der Mehrzeilen-Datensatzfunktion von AWK (Null-RS):

awk 1 RS= ORS='\n---\n' file

Dies führt zu einer Ausgabe, die mit der gewünschten Ausgabe identisch ist, mit Ausnahme einer Zeile "---" am Ende. Wenn diese Diskrepanz nicht akzeptabel ist, kann sie mit einem Sed-Filter beseitigt werden:

... | sed '$d'

verwandte Informationen