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