주어진 텍스트 파일에서 모든 공백을 제거하는 방법


81

주어진 텍스트 파일에서 모든 공백을 제거하고 싶습니다. 이에 사용할 수있는 셸 명령이 있습니까? 또는 sed이 목적 으로 사용하는 방법 .

나는 아래와 같은 것을 원한다.

$ cat hello.txt | sed ....

나는 이것을 시도했다 : cat hello.txt | sed 's/ //g'. 그러나 그것은 탭이 아닌 공백 만 제거합니다.


3
"모든 공백"은 줄 바꿈도 의미합니까?
glenn jackman

답변:


133
$ man tr
NAME
    tr - translate or delete characters

SYNOPSIS
    tr [OPTION]... SET1 [SET2]

DESCRIPTION
   Translate, squeeze, and/or delete characters from standard 
   input, writing to standard output.

줄 바꿈을 포함하여 모든 공백을 지우려면 다음을 시도하십시오.

cat file.txt | tr -d " \t\n\r" 

tr ( htompkins 주석에 대한 크레딧)에 정의 된 문자 클래스를 사용할 수도 있습니다 .

cat file.txt | tr -d "[:space:]"

예를 들어 수평 공백 만 지우려면 다음을 수행하십시오.

cat file.txt | tr -d "[:blank:]"

23
에서 정의한 문자 클래스를 사용할 수도 있습니다 tr. 예 : 모든 공백 cat file.txt | tr -d "[:space:]" 을 삭제하려면 : 모든 수평 공백을 삭제하려면 :cat file.txt | tr -d "[:blank:]"
htompkins

@ user3901666은 공백을 제거합니다. 예, 생성 된 출력이 원하는 것과 일치하면 말하기 어렵습니다. 무엇을 시도 했습니까?
파울로 스카 딘

24

내 의견보다 훨씬 간단합니다.

sed -r 's/\s+//g' filename

2
나는 이것을 시도했고 수정 된 텍스트를 STDOUT에 출력하지만 파일 자체를 변경하지는 않습니다.
Max Williams

4
@MaxWilliams - 단지와 함께 -i (대시 I) 플래그를 사용 나오지도
JeffCharter

1
이것은 개행을 제거하지 않으며 OP에서 원하는 것인지 확실하지 않습니다.
Graeme Moss

11

다른 줄로 변경하는 것과 같은 정보를 잃지 않고 공간을 지우려면 sed를 사용할 수 있다고 생각합니다.

cat hello.txt | sed '/^$/d;s/[[:blank:]]//g'

4
좋아,하지만 내가 쓸 수는 없을 것 같아tr -d " " < infile.txt > outfile.txt
NReilingh 2014 년

안녕하세요, 감사합니다.하지만 설명해 주시면 감사하겠습니다.
David Okwii

11

이 시도:

sed -e 's/[\t ]//g;/^$/d' 

( 여기 에서 찾았 습니다 )

첫 번째 부분은 모든 탭 ( \t)과 공백을 제거하고 두 번째 부분은 모든 빈 줄을 제거합니다.


1
이것은 실제로 작동합니다. sed -e 's / [\ t] // g; / ^ $ / d'특히 / ^ $ / d '를 설명하십시오. ^는 문자열의 시작이고 $는 끝입니다. / d는 sed를 사용할 때 삭제합니다. 그러나이 해석은 어떻게 공백을 삭제 하는가?
David Okwii

설명을 추가했습니다. ^$"줄의 시작"(^)과 "줄의 끝"($) 바로 뒤를 찾기 때문에 빈 줄과 일치합니다.
keyser 2016-06-04

6

모든 공백, 심지어 개행 을 제거하려면 :

perl -pe 's/\s+//g' file

4

나를위한 가장 쉬운 방법->

        echo "Hello my name is Donald" | sed  s/\ //g

2

이것은 아마도 가장 간단한 방법 일 것입니다.

sed -r 's/\s+//g' filename > output
mv ouput filename

2

이 시도:

tr -d " \t" <filename

자세한 내용은 tr (1) 맨 페이지를 참조하십시오.


2

야, 터미널에서 그냥 python test.py.

f = open('/home/hduser/Desktop/data.csv' , 'r')

x = f.read().split()
f.close()

y = ' '.join(x)
f = open('/home/hduser/Desktop/data.csv','w')
f.write(y)
f.close()

오래된 스레드를 부딪쳐서 미안하지만 f.read().strip("\t\n\r ")더 효율적이지 않습니까?
Jachdich

공백, 탭 등 b / w 단어가 두 개 이상 있으면 어떻게됩니까? 귀하의 솔루션은 선행 및 후행 공백에 대한 것이라고 생각합니다. 하나의 라이너를 원한다면 위의 코드를 쉽게 변환 할 수 있습니다.
Agnibesh 차우

2

이 답변은 다른 답변과 유사하지만 일부 사람들이 출력이 STDOUT으로 이동한다고 불평했기 때문에 원본 파일로 리디렉션하고 덮어 쓰도록 제안합니다. 나는 일반적으로 이것을 제안하지 않지만 때로는 빠르고 더러운 일을 제안합니다.

cat file.txt | tr -d " \t\n\r" > file.txt

1

흠 ... 순서대로 뭔가 sed -e "s/[ \t\n\r\v]//g" < hello.txt가 올바른 야구장 에 있어야하는 것 같습니다 (어쨌든 cygwin 아래에서 일하는 것 같습니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.