Wie füge ich Zeilenumbrüche zwischen Zeilen hinzu, die in der Befehlszeile gedruckt werden?


30

E-Mail-Protokolle sind unglaublich schwer zu lesen. Wie kann ich eine Leerzeile zwischen den Zeilen in der Befehlszeile ausgeben? Angenommen, ich greife nach dem Protokoll. Auf diese Weise werden mehrere umbrochene Zeilen nicht verwechselt.

Antworten:


52
sed G 
# option: g G    Copy/append hold space to pattern space.

Gwird nicht oft verwendet, ist aber nett für diesen Zweck. sed verwaltet zwei Pufferbereiche: den "Musterbereich" und den "Haltebereich". Die Linien verarbeitet durch Sed fließen normalerweise durch den Musterraum als verschiedene Befehle auf seinen Inhalt arbeiten ( s///, p, etc.); Der Speicherplatz beginnt leer und wird nur von einigen Befehlen verwendet.

Der GBefehl fügt eine neue Zeile und den Inhalt des Haltebereichs an den Musterbereich an. Das obige sed- Programm Gfügt niemals etwas in den Hold-Bereich ein, sondern fügt effektiv nur eine neue Zeile an jede verarbeitete Zeile an.


3
Das -e ist nicht nötig. Rohrleitungen whatever | sed Gsollten den Trick tun.
Frabjous

@frabjous: Richtig, könnte genauso gut weglassen, -eda wir dort nur ein einziges Befehlsargument brauchen.
Chris Johnsen

Kann ich dir gerne +2 geben? Nägel es!
Christian Bongiorno

aber es wird nur in stdout
angezeigt

8

Verwenden Sie awk, um einen zusätzlichen Zeilenumbruch einzufügen. Auf diese Weise können Sie auch Dinge herausfiltern, die Sie nicht möchten.

awk '{print $0,"\n"}' | less

4

Verwenden Sie sed, und ersetzen Sie die gesamte Zeile durch ein zusätzliches Zeilenumbruchszeichen:

grep foo /var/log/maillog | sed -e "s/^.*$/&1\n/"

4
Eine etwas einfachere sed-Ersetzung wäre 's / $ / \ n /', obwohl @Chris Johnsens 'G'-Befehl noch einfacher ist.
camh

3

Ist es das was du suchst?

grep SPAM mail.log | while read -r line; do echo; echo $line; done


Sie sollten wahrscheinlich verwenden read -r, um zu vermeiden, dass Backslash-Zeichen als Sonderzeichen behandelt werden.
Chris Johnsen

0

Wenn es mehr ist als nur nachzuschauen, ziehe ich es vor, sie in eine Textdatei zu senden und mit einem Texteditor zu öffnen, damit Sie die Zeilen so einstellen können, dass sie umgebrochen werden oder nicht, und einfach suchen können ... und die unerwünschten Zeilen löschen und so weiter ohne viele Befehle eingeben müssen.

cat file.log > log.txt und gedit log.txtoder ein Terminal-Editor wie Nano

Edit: oder was cp file.log log.txtist natürlich einfacher und schneller ... dank KeithB Kommentar


1
Warum catnicht cp?
KeithB

sicher cpwäre einfacher und schneller ... lol - ich lese die anderen Antworten Umgang mit grepund awkso schrieb ich ihm die catArt und Weise , aber ich bin zu korrigieren , dass dank
laurent
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.