Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

109
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda