mysql - bash - 使用 sed 从 sql 语句中删除第 n 项
问题描述
我不再需要表格中的列,并且需要更改用于插入数据的脚本。例如,我不再需要“代码”列。如何删除每个值的第三项?
-- 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
以上内容不会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', '؋');
推荐阅读
- c++ - Two methods with the same name but in different classes c++
- scala - How to combine 2 future sequences of type Seq[Either[A,B]]?
- r - 我怎样才能建立这个方程来进行约束最大化?
- node.js - 来自 ReactJS 的 Socket.io 连接没有像其他任何一样被 nginx 重定向
- python - Python - 在没有计数功能的列表中出现一个字符
- python - sklearn出现错误(LogisticRegression模型选择)
- java - 将 VBox 和 StackPane 放入另一个 StackPane 后,按钮不起作用
- c++ - XSLXWriter 在列的单元格中心插入多个图像
- haskell - Haskell - 检查位置是否是偶数/奇数
- excel - 如何通过vba清除Excel工作簿的内容