假设我有一个file.txt;该文件的内容是:
insert into x values('a ',' b',' c ');
insert into x values(' m ',' n ',' p ');
我只想删除单词后每行的空格values
。
期望的输出:
insert into x values('a','b','c');
insert into x values('m','n','p');
答案1
sed -e ':a' -e "s/\('[^' ]*\) */\1/g" -e ta file.txt
insert into x values('a','b','c');
insert into x values('m','n','p');
我们串联使用循环机制来逐步清除一行中可能具有的单引号对“...”内的空格。请注意,这是假设没有 TAB,但也可以处理
sed -e ':a' -e "s/\('[^'[:space:]]*\)[[:space:]]\{1,\}/\1/g" -e ta
答案2
假设您已经将这些值插入到表中,您可以修剪它们的空格字符。
还假设表中的列称为c1
、c2
和c3
:
UPDATE x SET c1 = TRIM(c1), c2 = TRIM(c2), c3 = TRIM(c3);
该TRIM()
函数将删除前导空格和尾随空格。
如果您想先在临时表上测试它:
CREATE TEMPORARY TABLE t AS SELECT * FROM x;
UPDATE t SET c1 = TRIM(c1), c2 = TRIM(c2), c3 = TRIM(c3);
SELECT * from t;
... 要不就
SELECT TRIM(c1), TRIM(c2), TRIM(c3) FROM x;
这根本不会改变数据库中的任何内容。
SQL 提示:插入值时,请务必提及列的名称:
INSERT INTO x (c1, c2, c3) VALUES ('a', 'b', 'c');
这既可以作为文档,也可以让您更改表的架构(插入新列或重新排列列),而无需查找和更改INSERT
代码中的每个语句。
答案3
awk -F '(' '{ gsub(" ","",$2); print $1 FS $2; }' input.txt
解释
- 将字符串除以 '(' 符号 - 现在有两个字段:
$1 = insert into x values
$2 = 'a ',' b',' c ');
- 过程2 美元字段,将所有空格替换为空。
- 组装新字符串:
1 美元(未更改)+FS(左括号)+2 美元(已处理,现在没有空格)。
输出:
insert into x values('a','b','c');
insert into x values('m','n','p');