我有一個充滿文字的文件,例如:
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
}