Agregue un nuevo carácter de línea en un file de text usando sed

Deseo agregar lo siguiente al file /etc/securetty usando sed :

 pts/0 pts/1 pts/2 pts/3 pts/4 pts/5 pts/6 pts/7 pts/8 pts/9 

Escribí el siguiente command para este propósito:

 sed -i '$a pts/0\\npts/1\\npts/2\\npts/3\\npts/4\\npts/5\\npts/6\\npts/7\\npts/8\\npts/9' /etc/securetty 

que me da la salida:

 pts/0\npts/1\npts/2\npts/3\npts/4\npts/5\npts/6\npts/7\npts/8\npts/9 

Me estoy perdiendo algo aquí. ¿Qué podría estar mal en mi command sed ?

Enfoque de shell simple:

 for i in {0..9}; do echo "pts/"$i; done >> /etc/securetty 

>> – para agregar salida al file

> – para dirigir la salida al file (sobrescritura)

Por cierto, si desea agregar al final de un file existente algo así, no necesita ni sed ni un bucle de shell. Es solo un command:

 $ printf '%s\n' "pts/"{0..10} >> /etc/securetty 

Si desea insert al principio del file, puede hacerlo con printf:

 $ cat file1 europe|EU australia|AU china|CN $ printf '%s\n%s\n' "pts/"{0..10} "$(<file1)" pts/0 pts/1 pts/2 pts/3 pts/4 pts/5 pts/6 pts/7 pts/8 pts/9 pts/10 europe|EU australia|AU china|CN 

Puede replace el contenido de su file /etc/securetty esta manera (incluso sed -i hace exactamente el mismo trabajo detrás de las escenas):

 $ printf '%s\n%s\n' "pts/"{0..10} "$(</etc/securetty)" > tmpsecure && mv -f tmpsecure /etc/securetty 

Alternativa:

 $ { printf '%s\n' "pts/"{0..10}; cat /etc/securetty; } > tmpsecure && mv -f tmpsecure /etc/securetty # Or # cat <(printf '%s\n' "pts/"{0..10}) /etc/securetty > tmpsecure && mv tmpsecure /etc/securetty 

Debería ser:

 sed -i 'a pts/0\npts/1\npts/2\npts/3\npts/4\npts/5\npts/6\npts/7\npts/8\npts/9' /etc/securetty 

Alternativamente, puede colocar el contenido en un file y usar la opción de read (r) de sed para agregarlo al file de destino.

Ejemplo:

 $ cat input.txt pts/0 pts/1 pts/2 pts/3 pts/4 pts/5 pts/6 pts/7 pts/8 pts/9 $ cat /etc/securetty This is a dummy file 

Mando:

 sed -i 'r input.txt' /etc/securetty 

El file /etc/securetty se modifica de la siguiente manera:

 $ cat /etc/securetty This is a dummy file pts/0 pts/1 pts/2 pts/3 pts/4 pts/5 pts/6 pts/7 pts/8 pts/9