我有一个充满文本的文件,例如:
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
有时包含 的行末尾会有逗号ENGINE
,有时没有。我想替换(即删除)那个逗号 - 我第一次天真的尝试是这样的:
sed -e 's/'$) ENGINE/$) ENGINE/' < the_file
当然,这行不通,但是否有可能sed
通过某种方式来实现呢?或者,如果没有,也许可以awk
?在最坏的情况下,我可以编写一个 bash 脚本,但那会很笨拙。
编辑
我发现上面的拼写错误了 - 应该是:
sed -e 's/,$) ENGINE/$) ENGINE/' < the_file
因此,在示例中,我想将倒数第二行末尾的逗号替换为空,或者更一般地,只是替换与某个表达式匹配的行之前最后一行末尾的某个子字符串。在我使用 的失败尝试中sed
,我使用$
来表示行尾,而且我似乎已经知道它无法工作,因为 sed 逐行读取,而不是跨行读取;但它说明了我想要实现的目标 - 而使用 可能无法实现sed
。
答案1
怎么样
sed '/ENGINE/ s/,$//' file
对于任何一条线包含“ENGINE”,删除行末的逗号。
答案2
awk 解决方案
/^) ENGINE/ {
sub( /,$/, "" )
print
next
}
{
print
}