usando GNU SED para comentar una línea y agregar una nueva línea

usando GNU SED para comentar una línea y agregar una nueva línea

Digamos que quiero editar el archivo /etc/ssh/sshd_config en RHEL 7 para proteger nuestra configuración ssh.

Quiero reemplazar, tomemos la línea Ciphers, por ejemplo, manteniendo el original en su lugar y comentándolo. También quiero poder eliminar la parte más pequeña posible de la cadena para evitar que Red Hat la rompa cada vez que actualicen rpm/install iso.

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc

debe convertirse...

#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
Ciphers abc-123,def-456,ghi-789 etc...

Intenté buscar/agregar una nueva línea en un archivo de prueba donde el nombre del archivo es testfile y el contenido es Este es mi archivo de prueba. Intenté agregar No, no es como una nueva línea y fallé estrepitosamente.

sed -i '/This is my test file./aNo it's not.' testfile

¿Cómo haría eso y, lo que es más importante, cuáles son los conceptos clave detrás de esto?

Respuesta1

Lo intenté con el siguiente comando sed y funcionó de maravilla

dominio

sed -i '/^Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-c/s/.*/#&\nCiphers abc-123,def-456,ghi-789/g' filename

producción

#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
Ciphers abc-123,def-456,ghi-789

Respuesta2

sed -i -n 'p; s/^Ciphers/#&/p' /etc/ssh/sshd_config

-ien su lugar

-nno imprime nada a menos que se imprima explícitamente

/pal final de la cadena de búsqueda fuerza la impresión, anulando efectivamente -nla cadena coincidente

información relacionada