¿Cómo se puede agregar "doble interlineado" a cualquier salida?

¿Cómo se puede agregar "doble interlineado" a cualquier salida?

Me gustaría tomar el resultado de un comando bash (en este caso grep) e insertar una línea en blanco cada dos líneas:

not
like
this ...

but

like

this!

¿Una forma inteligente de hacerlo en bash?

Respuesta1

Hay muchas maneras de hacer esto para archivos de texto. Probablemente el más simple sea

$ sed G filename

Respuesta2

Usando prdesde coreutils:

$ grep '' file | pr -Td
not

like

this ...

(tenga en cuenta que estohacecoloque doble espacio en la línea final (a diferencia de, digamos, sed '$!G'). De 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

Respuesta3

Comenzando con un archivo como:

$ cat >file
not
like
this ...

sed funcionará:

$ sed 's/$/\n/' file
not

like

this ...

Entonces awk:

$ awk 1 ORS='\n\n' file
not

like

this ...

1es la abreviatura críptica de awk para imprimir la línea y ORS='\n\n'le dice a awk que separe las líneas de salida no solo con una sino con dos nuevas líneas.

Más

Un comando sed más corto, como lo sugiereconductor de acero, es:

sed '$!G' file

El Gcomando agrega una nueva línea y elmantener espaciohasta el final delespacio de patrón. Dado que, de forma predeterminada, el espacio de retención está vacío, esto tiene el efecto de simplemente agregar una nueva línea adicional al final de cada línea. El prefijo $!le dice a sed que haga esto en todas las líneas.exceptoel último.

Respuesta4

Test
10
20
30

Output
perl -pe "s/$/\n/" test 
10

20

30

información relacionada