Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

105
Vistas
sintaxis sed regex para múltiples búsquedas

Estoy tratando de encontrar y reemplazar una cadena específica dentro de /etc/ssh/sshd_config.
#PermitRootLogin yes > PermitRootLogin no . Sin embargo, quiero asegurarme de obtener casi cualquier versión (si eso tiene sentido).

ex;

 #PermitRootLogin yes PermitRootLogin yes #PermitRootLogin no

Soy bastante nuevo en bash, linux, unix, etc. y realmente solo he estado aprendiendo estas cosas durante las últimas 2 semanas, así que si es posible, explícame como si fuera nuevo en linux/unix. Gracias de antemano.

Hasta ahora he probado 2 cosas hasta ahora y ninguno de ellos parece hacer lo que necesito.

 sed -E 's/(#|^)PermitRootLogin(yes|no)/PermitRootLogin no/' FILENAME

y

 sed -E 's/(#/|^/)PermitRootlogin(yes/|no/)/PermitRootLogin no/' FILENAME

Esperaba que todas las líneas del ejemplo anterior se cambiaran a;

 PermitRootLogin no PermitRootLogin no PermitRootLogin no
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

A este solo le falta un espacio

 sed -E 's/(#|^)PermitRootLogin(yes|no)/PermitRootLogin no/' FILENAME # ............................^

Yo sugeriría

 sed -E '/PermitRootLogin/ s/.*/PermitRootLogin no/' FILENAME

lo que significa: para cualquier línea que contenga la cadena "PermitRootLogin", reemplace la línea completa con "PermitRootLogin no"


Éste

 sed -E 's/(#/|^/)PermitRootlogin(yes/|no/)/PermitRootLogin no/' FILENAME

muestra un poco de malentendido del papel del carácter / en sed.

/ no es un carácter regex, es el delimitador del comando s para separar la expresión regular, el texto de reemplazo y las banderas. Ver 3.3 El Comando s en el manual sed.

over 4 years ago · Santiago Trujillo Denunciar

0

Con sus muestras mostradas, intente seguir el código awk .

 awk '/^#?PermitRootLogin/{print "PermitRootLogin no"}' Input_file

Explicación: la explicación simple sería verificar la condición si la línea comienza con # (manteniéndolo opcional) seguido de PermitRootLogin y luego usar la impresión PermitRootLogin seguido de no según el requisito.

NOTA: En caso de que desee guardar los cambios en el mismo archivo de entrada, ejecute lo siguiente: awk '/^#?PermitRootLogin/{print "PermitRootLogin no""}' Input_file > temp && mv temp Input_file

over 4 years ago · Santiago Trujillo Denunciar

0

Puedes usar este sed :

 sed -E 's/^#?(PermitRootLogin) +.*/\1 no/' file PermitRootLogin no PermitRootLogin no PermitRootLogin no

Donde el archivo de entrada es así:

 cat file #PermitRootLogin yes PermitRootLogin yes #PermitRootLogin no

Explicación:

  • ^ : Inicio
  • #? : Coincide con un # opcional
  • (PermitRootLogin) + : Haga coincidir PermitRootLogin y capture en el primer grupo seguido de 1+ espacio
  • .* : Coincide con cualquier cosa hasta el final de la línea
  • /\1 no/ : Sección de reemplazo para poner el valor del grupo de captura #1 seguido de espacio y no

Para guardar el cambio en línea en el uso del archivo:

 sed -i.bak -E 's/^#?(PermitRootLogin) +.*/\1 no/' file
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda