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

标签 mysql sql bash

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

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

最佳答案

您可以将 sed 与正则表达式结合使用来实现此目的。以下将从 VALUES 行之后开始的所有行中(就地)删除第三列:

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

上述内容不会从 CREATE TABLE 语句中删除 code VARCHAR(100), 或从 INSERT INTO< 中删除 code/行。如果您也想删除它们,可以使用以下代码:

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

关于mysql - bash - 使用 sed 从 sql 语句中删除第 n 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51201420/

相关文章:

mysql - 删除重复行,同时对另一行进行分组

php - 使用 1 个查询将 3 个表与 mySQL 连接起来

PHP 代码在 PHP CLI 中不起作用

sql - 如何加快 Postgresql 中复杂查询的速度

mysql - 获取跨多个列值匹配的行

sql - 按整数数组中的索引查询表

bash - RUN 命令中字符串中的 Dockerfile ARG 替换

php - 如何为 Composer 安装提供用户名和密码?

linux - 从一个系统无密码登录多台 linux 机器的 Shell 脚本

python - 基于 Python/MySQL 的管道中的字符编码问题