bash-使用sed从sql语句中删除第n项

gwo2fgha  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(317)

我不再需要表中的列,需要更改插入数据的脚本。例如,我不再需要“code”列了。如何删除每个值的第三项?

-- 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', '؋');
dgiusagp

dgiusagp1#

你可以用 sed 用正则表达式来实现这一点。下面将从之后开始的所有行中删除(就地)第3列 VALUES 行:

sed -i "s/\(('[a-zA-Z]\+', '[a-zA-Z]\+',\) '[a-zA-Z]\+',\( '.*').*\)/\1\2/g" input.sql

以上内容不会删除 code VARCHAR(100),CREATE TABLE 声明或 codeINSERT 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', '؋');

相关问题