Ich möchte die Ausgabe eines Bash-Befehls (in diesem Fall grep) nehmen und nach jeder zweiten Zeile eine Leerzeile einfügen:
not
like
this ...
but
like
this!
Eine clevere Möglichkeit, dies in Bash zu tun?
Antwort1
Es gibt viele Möglichkeiten, dies für Textdateien zu tun. Die einfachste ist wahrscheinlich
$ sed G filename
Antwort2
Verwendung pr
von coreutils
:
$ grep '' file | pr -Td
not
like
this ...
(beachten Sie, dass diesetutDoppelter Zeilenabstand in der letzten Zeile – anders als beispielsweise sed '$!G'
). Von man pr
:
-d, --double-space
double space the output
-T, --omit-pagination
omit page headers and trailers, eliminate any pagination by form
feeds set in input files
Antwort3
Beginnen Sie mit einer Datei wie:
$ cat >file
not
like
this ...
sed funktioniert:
$ sed 's/$/\n/' file
not
like
this ...
Das wird awk auch tun:
$ awk 1 ORS='\n\n' file
not
like
this ...
1
ist die kryptische Abkürzung von awk für „print-the-line“ und ORS='\n\n'
weist awk an, Ausgabezeilen nicht nur durch eine, sondern durch zwei Zeilenumbrüche zu trennen.
Mehr
Ein kürzerer sed-Befehl, wie vorgeschlagen vonStahltreiber, Ist:
sed '$!G' file
Der G
Befehl fügt eine neue Zeile an und dieLeertaste gedrückt haltenbis zum Ende desMusterraum. Da der Hold Space standardmäßig leer ist, wird dadurch lediglich ein zusätzlicher Zeilenumbruch am Ende jeder Zeile eingefügt. Das Präfix $!
weist sed an, dies für alle Zeilen zu tun.außerder Letzte.
Antwort4
Test
10
20
30
Output
perl -pe "s/$/\n/" test
10
20
30