Jak dodać nowe linie między wierszami wydrukowanymi w wierszu poleceń?

30

Dzienniki poczty są niezwykle trudne do odczytania. Jak mogę wypisać pustą linię między każdą linią wydrukowaną w linii poleceń? Powiedzmy na przykład, że przeglądam dziennik. W ten sposób wiele owiniętych linii nie jest mylonych.

ksenoterracid
źródło

Odpowiedzi:

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

Gnie jest często używany, ale jest dobry do tego celu. sed utrzymuje dwie przestrzenie buforowe: „przestrzeń wzoru” i „przestrzeń wstrzymania”. Linie przetwarzane przez sed zazwyczaj przepływa przez przestrzeń wzór jak różne polecenia działają na jego zawartość ( s///, pitp); pole wstrzymania zaczyna się puste i jest używane tylko przez niektóre polecenia.

GPolecenie dołącza do nowej linii i zawartość miejsca przechowywania do przestrzeni wzorca. Powyższy program sed nigdy nie umieszcza niczego w przestrzeni wstrzymania, więc Gskutecznie dodaje tylko nową linię do każdej przetwarzanej linii.

Chris Johnsen
źródło
3
-E nie jest konieczne. Rurociągi whatever | sed Gpowinny załatwić sprawę.
frabjous
@frabjous: Racja, równie dobrze można zrezygnować, -eponieważ potrzebujemy tylko jednego argumentu polecenia.
Chris Johnsen
Mogę ci dać, +2? Przygwoździć to!
Christian Bongiorno,
ale jest pokazywany tylko na standardowym ekranie, ale go nie zapisuj
biolinh
8

Użyj awk, aby dodać dodatkową nową linię. Pozwala to również odfiltrować rzeczy, których nie chcesz.

awk '{print $0,"\n"}' | less
KeithB
źródło
4

Użyj sed i zastąp samą linię plus jeden dodatkowy znak nowej linii:

grep foo /var/log/maillog | sed -e "s/^.*$/&1\n/"
fschmitt
źródło
4
Nieco prostszym podstawieniem sed byłby „s / $ / \ n /”, chociaż polecenie „G” @Chrisa Johnsena jest jeszcze prostsze.
camh
3

Czy o to ci chodzi?

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

Nifle
źródło
Prawdopodobnie będziesz chciał użyć tej opcji, read -raby uniknąć traktowania znaków odwrotnego ukośnika jako specjalnych.
Chris Johnsen
0

Jeśli chodzi o coś więcej niż tylko wygląd, wolę wysłać je do pliku tekstowego i otworzyć za pomocą edytora tekstu, abyś mógł ustawić linie do zawijania lub nie i łatwo wyszukiwać ... oraz usuwać niechciane linie i tak dalej bez wpisując wiele poleceń.

cat file.log > log.txt i gedit log.txtlub edytor terminali, taki jak nano

Edycja: lub cp file.log log.txtco jest oczywiście łatwiejsze i szybsze ... dzięki komentarzowi KeithB

Laurent
źródło
1
Dlaczego catnie cp?
KeithB
na pewno cpbyłoby łatwiej i szybciej ... lol - Czytałem inne odpowiedzi do czynienia ze grepi awktak napisałem mu catdrogę, ale ja sprostowanie, że dzięki
Laurent