¿Cómo agrego nuevas líneas entre las líneas impresas en la línea de comando?

30

Los registros de correo son increíblemente difíciles de leer. ¿Cómo podría generar una línea en blanco entre cada línea impresa en la línea de comando? Por ejemplo, digamos que estoy greping el registro. De esa manera, no se confunden varias líneas ajustadas

xenoterracida
fuente

Respuestas:

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

Gno se usa con frecuencia, pero es bueno para este propósito. sed mantiene dos espacios de almacenamiento intermedio: el "espacio de patrón" y el "espacio de retención". Las líneas procesados por sed generalmente fluyen a través del espacio de patrones como varios comandos operan en su contenido ( s///, p, etc.); el espacio de espera comienza vacío y solo lo utilizan algunos comandos.

El Gcomando agrega una nueva línea y el contenido del espacio de retención al espacio del patrón. El programa sed anterior nunca pone nada en el espacio de espera, por lo que Gagrega de manera efectiva solo una nueva línea a cada línea que se procesa.

Chris Johnsen
fuente
3
El -e no es necesario. la tubería whatever | sed Gdebería hacer el truco.
frabjous
@frabjous: Correcto, bien podría dejar de lado -eya que allí solo necesitamos un argumento de comando único.
Chris Johnsen
¿Puedo darte un me gusta, +2? ¡Le da en el clavo!
Christian Bongiorno
pero, solo se muestra en stdout, pero no se guarda
biolinh
8

Use awk para agregar una nueva línea adicional. Esto también te permite filtrar cosas que no quieres.

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

Use sed y reemplace la línea completa sola más un carácter de nueva línea adicional:

grep foo /var/log/maillog | sed -e "s/^.*$/&1\n/"
fschmitt
fuente
44
Una sustitución sed ligeramente más simple sería 's / $ / \ n /', aunque el comando 'G' de @Chris Johnsen es aún más simple.
camh
3

¿Es esto lo que buscas?

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

Nifle
fuente
Probablemente quiera usar read -rpara evitar tratar los caracteres de barra invertida como especiales.
Chris Johnsen
0

Si se trata de algo más que solo mirar, prefiero enviarlos a un archivo de texto y abrirlos con un editor de texto para que pueda configurar las líneas para ajustar o no y realizar búsquedas fácilmente ... y eliminar las líneas no deseadas y así sucesivamente sin tener que escribir muchos comandos.

cat file.log > log.txt y / gedit log.txto un editor de terminal como nano

Editar: o cp file.log log.txtque por supuesto es más fácil y rápido ... gracias al comentario de KeithB

Laurent
fuente
1
¿Por qué caty no cp?
KeithB
Seguro cpque sería más fácil y más rápido ... lol - Estaba leyendo las otras respuestas que tratan grepy awkasí lo escribí el catcamino, pero estoy corrección que, gracias
Laurent