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

289
Vistas
Cómo reemplazar 2 líneas consecutivas después de Match with Sed

¿Hay alguna manera de reemplazar las siguientes dos líneas después de encontrar una coincidencia usando sed?

tengo un archivo

 #ABC oneSize=bar twoSize=bar threeSize=foo

Pero me gustaría reemplazar las dos líneas inmediatas una vez que el patrón #ABC para que se convierta en

 #ABC oneSize=foo twoSize=foo threeSize=foo

Puedo gsed '/^#ABC/{n;s/Size=bar/Size=foo/}' file

Pero solo cambia la línea twoSize no oneSize

¿Hay alguna manera de hacer que cambie tanto oneSize como twoSize?

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

0

Puedes repetir los comandos:

 gsed '/^#ABC/{n;s/Size=bar/Size=foo/;n;s/Size=bar/Size=foo/}' file

Vea la demostración en línea .

El comando n " imprime el espacio del patrón, luego, independientemente, reemplaza el espacio del patrón con la siguiente línea de entrada. Si no hay más entradas, sed sale sin procesar más comandos ".

Entonces, la primera vez que se usa, reemplaza en la primera línea después de la línea que comienza con #ABC , luego reemplaza en la segunda línea debajo de esa.

over 4 years ago · Santiago Trujillo Denunciar

0

gnu y algunas otras versiones de sed le permiten tomar un rango usando un número relativo para que simplemente pueda usar:

 sed -E '/^#ABC$/,+2 s/(Size=)bar/\1foo/' file #ABC oneSize=foo twoSize=foo threeSize=foo

Detalles del comando:

  • /^#ABC$/,+2 Rango de coincidencia desde el patrón #ABC hasta las siguientes 2 líneas
  • s/(Size=)bar/\1foo/ : Haga coincidir Size=bar y reemplace con Size=foo , usando un grupo de captura para evitar la repetición de la misma cadena en la búsqueda y sustitución

También puede considerar awk para evitar repetir el patrón y los reemplazos N veces si tiene que reemplazar N líneas después del patrón coincidente:

 awk 'n-- {sub(/Size=bar/, "Size=foo")} /^#ABC$/ {n=2} 1' file #ABC oneSize=foo twoSize=foo threeSize=foo
over 4 years ago · Santiago Trujillo Denunciar

0

Usando sed , el ciclo se interrumpirá cuando ya no se encuentre Size=bar , por lo tanto, se reemplazarán las primeras 2 líneas después de la coincidencia.

 $ sed '/^#ABC/{:l;n;s/Size=bar/Size=foo/;tl}' input_file #ABC oneSize=foo twoSize=foo threeSize=foo
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