텍스트 파일에서 줄 바꿈을 어떻게 제거합니까?


116

다음 데이터가 있으며 모든 데이터를 한 줄에 입력해야합니다.

나는 이것을 가지고있다:

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

나는 이것이 필요합니다 :

22791;14336;22821;34653;21491;25522;33238;

편집하다

이 명령 중 어느 것도 완벽하게 작동하지 않습니다.

대부분의 데이터는 다음과 같이 표시됩니다.

22791

;14336

;22821

;34653

;21491

;25522

15
브라우저의 주소 표시 줄이나 다른 텍스트 필드에 복사하여 붙여 넣습니다. 빠르지는 않지만 소량의 데이터에 대해 작동합니다.
ignis 2013

답변:


245
tr -d '\n' < yourfile.txt

편집하다:

여기에 게시 된 명령이 작동하지 않는 경우 필드를 구분하는 줄 바꿈 외에 다른 것이있는 것입니다. 파일에 DOS / Windows 줄 끝이있을 수 있습니다 (이 경우에도 Perl 솔루션이 작동 할 것으로 예상하지만)?

시험:

tr -d "\n\r" < yourfile.txt

그래도 작동하지 않으면 파일을 더 면밀히 검사하여 (예 : 16 진수 편집기에서) 제거 할 문자가 실제로 있는지 찾아야합니다.


7
이 출력을 같은 파일이나 다른 파일에 어떻게 작성합니까?
Goldname

3
tr빈 줄에는 적합하지 않다고 생각 합니다. 어떻게 생각해? - - 내가 생각하는 것은 sed여기에 설명 된 것처럼 최선의 방법입니다 stackoverflow.com/q/16414410/54964
레우 레오폴드 헤르츠 준영

출력을 다른 파일로 라우팅하려면 출력 리디렉션을 사용하십시오. 동일한 파일로 라우팅하려면 "sponge"(Debian 기본 시스템의 "moreutils"패키지에서 사용 가능)로 파이프합니다.
plugwash

출력을 같은 파일에 쓰려면 서브 쉘을 사용하십시오echo -n $(tr -d "\n" < yourfile.txt) > yourfile.txt
andpei

11
perl -p -i -e 's/\R//g;' filename

일을해야합니다.


Golfs toperl -pie 's/\R//g' filename
Trenton

9
paste -sd "" file.txt

1
Solaris (10) paste -sd ""에서는 기본적으로 STDIN에서 작동하지 않으므로 배관하는 경우 다음을 사용하십시오. (some command) | paste -sd "" -
JohnGH

마지막 개행 을 제거하려는 경우에도 작동하지 않습니다 . 중간 개행 만 제거합니다.
josch

이것은 Mac OS에서 작동하지 않았고 Sundeep의 버전은 작동했습니다. paste -sd'\0' -
Trenton

7
tr -d '\n' < file.txt

또는

awk '{ printf "%s", $0 }' file.txt

또는

sed ':a;N;$!ba;s/\n//g' file.txt

이 페이지는 여기 제거 줄 바꿈에 다른 방법의 무리가 있습니다.

고양이 학대를 제거하기 위해 편집 :)


4

사용하다

head -n 1 filename | od -c 

불쾌한 캐릭터가 무엇인지 파악합니다. 그런 다음 사용

tr -d '\n' <filename

LF 용

tr -d '\r\n' <filename

CRLF 용



2

man 1 ed 사용 :

# cf. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed 
ed -s file <<< $'1,$j\n,p'  # print to stdout 
ed -s file <<< $'1,$j\nwq'  # in-place edit

2

괴상한 사실 : 대신 ASCII를 사용하십시오.

tr -d '\012' < filename.extension   

(편집 된 원인은 동일한 솔루션을 가진 friggin '답변을 보지 못했으며 차이점은 ASCII가 있다는 것뿐이었습니다)


2

POSIX 클래스 와 함께 sed 사용

공백 (공백 및 탭) 만 포함 된 모든 줄이 제거됩니다.

sed '/^[[:space:]]*$/d'

작업중인 모든 것을 가져 와서 파이프로 연결하세요.

cat filename | sed '/^[[:space:]]*$/d'


sed -i '/ ^ [[: space :]] * $ / d'파일 이름 ... 인플레 이스 편집 용; 화면에 위의 뜻을 출력으로 대답
BradChesney79

1
$ perl -0777 -pe 's / \ n + // g'입력> 출력
$ perl -0777 -pe 'tr / \ n // d'입력> 출력

1

데이터가 file.txt에있는 경우 :

echo $(<file.txt) | tr -d ' '

' $(<file.txt)'는 파일을 읽고 내용을 일련의 단어로 제공하고 'echo'는 그 사이에 공백을 표시합니다. 그런 다음 'tr'명령은 모든 공백을 삭제합니다.

22791;14336;22821;34653;21491;25522;33238;

이것은 입력이 너무 크지 않고 Bash를 사용하는 한 작동합니다 (Bash에 태그가 지정되었으므로 괜찮습니다). 내가 지금 답을 쓰고 있다면 tr -d '\n' < file.txt, 그것은 받아 들여진 답이하는 일입니다 (그리고 그 당시에 그것을 쓰지 않은 것에 놀랐습니다). 이것은 아마도 '아직 다른 방법'을 보여주기 위해 작성되었을 것입니다.
Jonathan Leffler 2015 년

1

xargs 줄 바꿈도 소비합니다 (그러나 마지막 줄 바꿈을 추가합니다) :

xargs < file.txt | tr -d ' '

1

숫자와 세미콜론 만 유지하기를 원한다고 가정하면, 다음은 주요 인코딩 문제가 없다고 가정하고 트릭을 수행해야하지만 마지막 "개행 문자"도 제거됩니다.

$ tr -cd ";0-9"

소수점, 쉼표 등을 유지하려는 경우 다른 문자를 포함하도록 위를 쉽게 수정할 수 있습니다.


1

gedit 텍스트 편집기 (3.18.3) 사용

  1. 검색 클릭
  2. 찾기 및 바꾸기 ...를 클릭합니다 .
  3. 입력 \n\s으로 찾기 필드
  4. 남겨 교체하지 (아무) 빈
  5. 정규식 체크 박스
  6. 찾기 버튼을 클릭하십시오

참고 : 이것은 OP의 원래 7 년 된 문제를 정확히 해결하지는 못하지만 유사한 "내 텍스트를 한 줄에 모두 가져 오는 방법"질문으로 SE에서 여기로가는 길을 찾는 멍청한 리눅스 사용자 (나와 같은)를 도울 것입니다. .


1

오늘 같은 경우가 있었는데, vim 또는 nvim에서 매우 쉬웠으며 gJ라인을 결합 하는 데 사용할 수 있습니다 . 사용 사례의 경우

99gJ

이것은 당신의 모든 99 라인에 합류합니다. 99가입 할 라인 수에 따라 필요에 따라 번호 를 조정할 수 있습니다 . 다만 가입하면 1 개 라인을, 만 gJ좋은 충분하다.


0

나는 awk로 할 것입니다.

awk '/[0-9]+/ { a = a $0 ";" } END { print a }' file.txt

(단점은 a가 메모리에 "누적"된다는 것입니다).

편집하다

printf를 잊어 버렸습니다! 그래서 또한

awk '/[0-9]+/ { printf "%s;", $0 }' file.txt

또는 아마도 awk를 사용하여 다른 ans에서 이미 주어진 것입니다.


0

내가 파일에서 코드를 복사있을 때 나는 보통이 유스 케이스를 얻을 내가 불필요한 새로운 라인을 추가하지 않고 콘솔에 붙여 싶은, 내가 bash는 별칭을하고 결국
(내가 그것을라고 oneline당신이 호기심 경우)

xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i
  • xsel -b -o 내 클립 보드를 읽습니다.

  • tr -d '\n' 새 줄을 제거합니다.

  • tr -s ' ' 반복되는 공간을 제거합니다.

  • xsel -b -i 이것을 내 클립 보드로 다시 푸시합니다.

그 후 클립 보드의 새 내용을 콘솔 등의 한 줄에 붙여 넣습니다.


0

특히 이상한 단어 줄 바꿈을 수정하기 위해 GUI에서이 작업을 수행해야 할 때 가장 분명하고 빠른 대답을 놓치고 있습니다.

  • 열다 gedit

  • 그런 다음 Ctrl+ H, Find텍스트 상자 \nReplace with빈 공간에 넣은 다음 확인란 Regular expression과 짜잔 을 채우십시오 .


0

파일 끝에서 후행 개행을 제거하려면

python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.