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 pr
desde 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 ...
1
es 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 G
comando 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