Usar SED para quitar el comentario de una línea de archivo de configuración y reemplazar texto en un archivo de configuración de Linux

Usar SED para quitar el comentario de una línea de archivo de configuración y reemplazar texto en un archivo de configuración de Linux

Estoy intentando automatizar la configuración de ciertos parámetros en mi /etc/ssh/sshd_configarchivo, sobre todo el

#PermitRootLogin yes

y

#LoginGraceTime 2m

Deberían leer:

PermitRootLogin no
LoginGraceTime 60

No soy un genio de los guiones, así que tengan paciencia conmigo...

He intentado sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_configponer la bola en marcha, pero obtengo un resultado extraño. Simplemente elimina el archivo en el que estoy intentando trabajar...

¿Alguien puede explicarme cómo usar sed?

Respuesta1

Redirigir la salida a un archivo temporal, luego cambiar el nombre del archivo temporal al archivo original

sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config > /etc/ssh/sshd_config.tmp && mv -f /etc/ssh/sshd_config.tmp /etc/ssh/sshd_config

O si tienes GNU sedpuedes usar la -iopción de edición in situ

sed -i -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config

Respuesta2

Similar a la respuesta de @Bodo, pero esta solución deja la línea original intacta y agrega la versión modificada debajo de la línea original. Esto sólo tiene sentido si desea conservar la línea original como comentario.

 sed -i'' -n 'p;s/#\(LoginGraceTime\) 2m/\1 60/p;s/#\(PermitRootLogin\) yes/\1 no/p' /etc/ssh/sshd_config

Aquí usamos un grupo de captura \(...\)que se sustituye por \1en el reemplazo (porque somos demasiado vagos para escribir la misma cadena nuevamente).

Sed con la opción -nsolo genera las líneas impresas explícitamente, por lo que la primera pse usa para imprimir las líneas no modificadas y los dos comandos siguientes para imprimir las líneas modificadas.

información relacionada