我不再需要表格中的列,并且需要更改用于插入数据的脚本。例如,我不再需要“代码”列。如何删除每个值的第三项?
-- Create table variable
CREATE TABLE currency (
country VARCHAR(100),
currency VARCHAR(100),
code VARCHAR(100),
symbol VARCHAR(100)
);
-- Insert currency records
INSERT INTO currency (country, currency, code, symbol)
VALUES
('Albania', 'Leke', 'ALL', 'Lek'),
('Afghanistan', 'Afghanis', 'AFN', '؋');
答案 0 :(得分:0)
您可以将sed
与正则表达式配合使用来实现此目的。以下内容将从VALUES
行之后的所有行中删除(就地)第三列:
sed -i "s/\(('[a-zA-Z]\+', '[a-zA-Z]\+',\) '[a-zA-Z]\+',\( '.*').*\)/\1\2/g" input.sql
以上内容不会将code VARCHAR(100),
语句中的CREATE TABLE
或code
行中的INSERT INTO
删除。如果也要删除它们,则可以使用以下代码:
cat input.sql | sed '/code\s\+VARCHAR/d' | sed 's/\(INSERT INTO .*\)code, \(.*\)/\1\2/' | sed "s/\(('[a-zA-Z]\+', '[a-zA-Z]\+',\) '[a-zA-Z]\+',\( '.*').*\)/\1\2/g"
这将输出:
-- Create table variable
CREATE TABLE currency (
country VARCHAR(100),
currency VARCHAR(100),
symbol VARCHAR(100)
);
-- Insert currency records
INSERT INTO currency (country, currency, symbol)
VALUES
('Albania', 'Leke', 'Lek'),
('Afghanistan', 'Afghanis', '؋');