Agregue un carácter de nueva línea en un archivo de texto usando sed

Agregue un carácter de nueva línea en un archivo de texto usando sed

Quiero agregar lo siguiente al archivo /etc/securettyusando sed:

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

Escribí el siguiente comando 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

lo 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

Claramente me estoy perdiendo algo aquí. ¿Qué podría estar mal en mi sedcomando?

Respuesta1

Simplecaparazónacercarse:

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

>>- para agregar la salida al archivo

>- para dirigir la salida al archivo (sobrescritura)

Respuesta2

Por cierto, si desea agregar alfinde un archivo existente similar a este, no necesita ni sed ni un bucle de shell. Es solo un comando:

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

Si desea insertar en elcomienzodel archivo aún puedes 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 reemplazar el contenido de su archivo /etc/securettyde esta manera (incluso sed -ihace exactamente el mismo trabajo detrás de escena):

$ 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

Respuesta3

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 archivo y usar la read (r)opción sed para agregarlo al archivo 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

Dominio:

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

El archivo /etc/securettyse 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

información relacionada