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 sed
de 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
}