Como adiciono novas linhas entre as linhas impressas na linha de comando?

30

Os logs de correio são incrivelmente difíceis de ler. Como eu poderia gerar uma linha em branco entre cada linha impressa na linha de comando? Por exemplo, digamos que estou cumprimentando o log. Dessa forma, várias linhas quebradas não estão sendo confundidas.

xenoterracida
fonte

Respostas:

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

Gnão é usado com frequência, mas é bom para esse fim. O sed mantém dois espaços no buffer: o “espaço padrão” e o “espaço de espera”. As linhas transformados por sed geralmente fluir através do espaço de padrões de vários comandos de operar no seu conteúdo ( s///, p, etc.); o espaço de espera começa vazio e é usado apenas por alguns comandos.

O Gcomando anexa uma nova linha e o conteúdo do espaço de espera ao espaço do padrão. O programa sed acima nunca coloca nada no espaço de espera, então Gefetivamente acrescenta apenas uma nova linha a cada linha processada.

Chris Johnsen
fonte
3
O -e não é necessário. tubulação whatever | sed Gdeve fazer o truque.
Frabjous
@frabjous: Certo, é melhor deixar de lado, -epois só precisamos de um único argumento de comando.
Chris Johnsen
Posso te dar +2? Acertou em cheio!
Christian Bongiorno
mas, é apenas mostrar em stdout, mas não salvá-lo
biolinh
8

Use awk para adicionar uma nova linha extra. Isso também permite filtrar as coisas que você não deseja.

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

Use sed e substitua a linha inteira por si só, mais um caractere de nova linha:

grep foo /var/log/maillog | sed -e "s/^.*$/&1\n/"
fschmitt
fonte
4
Uma substituição sed um pouco mais simples seria 's / $ / \ n /', embora o comando 'G' de @Chris Johnsen seja ainda mais simples.
Camh
3

É isso que você procura?

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

Nifle
fonte
Você provavelmente desejará usar read -rpara evitar o tratamento de caracteres de barra invertida como especiais.
quer
0

Se for mais do que apenas visual, prefiro enviá-los para um arquivo de texto e abrir com um editor de texto para que você possa definir as linhas para quebrar ou não e fazer pesquisas facilmente ... e excluir as linhas indesejadas e assim por diante sem tendo que digitar muitos comandos.

cat file.log > log.txt e gedit log.txtou um editor de terminal como nano

Edit: ou o cp file.log log.txtque é obviamente mais fácil e rápido ... graças ao comentário do KeithB

Laurent
fonte
1
Por que cate não cp?
KeithB
certeza cpseria mais fácil e mais rápido ... lol - Eu estava lendo as outras respostas que lidam com grepe awkentão eu escrevi o catcaminho, mas eu estou corrigindo que, graças
laurent