Una solución extraña

Una solución extraña

Tengo un archivo lleno de texto como:

CREATE TABLE `wild_adventure_game` (
  `game_instance_id` bigint(20) unsigned NOT NULL,
  `free_game_config_id` bigint(20) unsigned DEFAULT NULL,
  `respin_instance_id` bigint(20) DEFAULT NULL,
  `state` varchar(20) NOT NULL,
  `stake` decimal(11,2) NOT NULL,
  `pay_line_win` decimal(11,2) NOT NULL,
  `bonus_win` decimal(11,2) NOT NULL,
  `total_win` decimal(11,2) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1

A veces hay una coma al final de la línea que contiene ENGINE, otras no. Quiero reemplazar (es decir, eliminar) esa coma; mi primer intento ingenuo fue algo como:

sed -e 's/'$) ENGINE/$) ENGINE/' < the_file

Esto no funcionó, por supuesto, pero ¿es posible discutir sedde tal manera que se pueda hacer? O si no, ¿tal vez awk? En el peor de los casos, puedo escribir un script bash, pero será bastante complicado.

Editar

Veo que cometí un error tipográfico arriba; debería haber sido:

sed -e 's/,$) ENGINE/$) ENGINE/' < the_file

Entonces, en el ejemplo, quiero reemplazar la coma al final de la penúltima línea con nada, o más generalmente, simplemente reemplazar alguna subcadena al final de la última línea antes de una línea que coincida con alguna expresión. En mi intento fallido con sed, solía $representar el final de una línea, y ya sabía que no podía funcionar, porque sed lee las líneas una por una, no a través de los finales de línea; pero ilustra lo que me gustaría lograr, y puede que no sea posible con sed.

Respuesta1

Qué tal si

sed '/ENGINE/ s/,$//' file

Para cualquier línea quecontiene"MOTOR", elimine una coma al final de la línea.

Respuesta2

Una solución extraña

  /^) ENGINE/ {
    sub( /,$/, "" )
    print
    next
  }

  {
    print
  }

información relacionada