Como remover espaços da linha depois de uma determinada palavra?

2

Suponha que eu tenha um arquivo.txt; o conteúdo do arquivo é:

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

Eu só quero remover espaços de cada linha após a palavra values .

Saída desejada:

insert into x values('a','b','c');
insert into x values('m','n','p');
    
por Ajay 15.06.2017 / 07:04

3 respostas

2

sed -e ':a' -e "s/\('[^' ]*\)  *//g" -e ta  file.txt
insert into x values('a','b','c');
insert into x values('m','n','p');

Usamos um mecanismo de looping em conjunto para eliminar progressivamente os espaços dentro dos pares de aspas simples '...' que uma linha pode ter. Note que isto está assumindo que não há TABs, mas que podem ser tratados da mesma forma

sed -e ':a' -e "s/\('[^'[:space:]]*\)[[:space:]]\{1,\}//g" -e ta
    
por 15.06.2017 / 11:01
2

Supondo que você já inseriu esses valores na tabela, você pode apará-los com seus caracteres de espaço.

Supondo também que as colunas na tabela são chamadas c1 , c2 e c3 :

UPDATE x SET c1 = TRIM(c1), c2 = TRIM(c2), c3 = TRIM(c3);

A função TRIM() removerá os espaços iniciais e finais.

Se você quiser testar isso em uma tabela temporária primeiro:

CREATE TEMPORARY TABLE t AS SELECT * FROM x;
UPDATE t SET c1 = TRIM(c1), c2 = TRIM(c2), c3 = TRIM(c3);
SELECT * from t;

... ou apenas

SELECT TRIM(c1), TRIM(c2), TRIM(c3) FROM x;

que não alteraria nada no banco de dados.

Uma dica SQL: Ao inserir valores, mencione os nomes das colunas:

INSERT INTO x (c1, c2, c3) VALUES ('a', 'b', 'c');

Isso serve como documentação e permite que você altere o esquema da tabela (inserindo novas colunas ou reorganizando colunas) sem ter que procurar e alterar todas as instruções INSERT em seu código.

    
por 15.06.2017 / 11:13
1

awk -F '(' '{ gsub(" ","",$2); print $1 FS $2; }' input.txt

Explicação

  1. Divida a sequência pelo sinal de ( '- tenha dois campos agora: $1 = insert into x values e $2 = 'a ',' b',' c ');
  2. campo
  3. process $ 2 , substituindo todos os espaços por nada.
  4. montando nova string:
    $ 1 (não alterado) + FS (sinal de colchete) + $ 2 (processado, sem espaços) agora).

Saída:

insert into x values('a','b','c');
insert into x values('m','n','p');
    
por 15.06.2017 / 14:19