如何删除给定单词后面的行中的空格?

如何删除给定单词后面的行中的空格?

假设我有一个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

假设您已经将这些值插入到表中,您可以修剪它们的空格字符。

还假设表中的列称为c1c2c3

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. 将字符串除以 '(' 符号 - 现在有两个字段:
    $1 = insert into x values
    $2 = 'a ',' b',' c ');
  2. 过程2 美元字段,将所有空格替换为空。
  3. 组装新字符串:
    1 美元(未更改)+FS(左括号)+2 美元(已处理,现在没有空格)。

输出:

insert into x values('a','b','c');
insert into x values('m','n','p');

相关内容