Làm cách nào để xóa dòng mới khỏi tệp văn bản?


116

Tôi có dữ liệu sau đây và tôi cần đặt tất cả vào một dòng.

Tôi có cái này:

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

Tôi cần cái này:

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

BIÊN TẬP

Không có lệnh nào trong số này hoạt động hoàn hảo.

Hầu hết trong số họ để dữ liệu giống như sau:

22791

;14336

;22821

;34653

;21491

;25522

15
Sao chép-dán vào thanh địa chỉ của trình duyệt hoặc một trường văn bản khác. Quick'n'dirty nhưng hoạt động với lượng dữ liệu nhỏ.
ignis

Câu trả lời:


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

Biên tập:

Nếu không có lệnh nào được đăng ở đây hoạt động, thì bạn có một cái gì đó khác ngoài một dòng mới phân tách các trường của bạn. Có thể bạn có phần cuối dòng DOS / Windows trong tệp (mặc dù tôi mong đợi các giải pháp Perl hoạt động ngay cả trong trường hợp đó)?

Thử:

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

Nếu điều đó không hiệu quả thì bạn sẽ phải kiểm tra tệp của mình kỹ hơn (ví dụ như trong trình chỉnh sửa hex) để tìm ra những ký tự thực sự có trong đó mà bạn muốn xóa.


7
Làm cách nào để bạn ghi kết quả đầu ra này vào cùng một tệp hoặc tệp khác?
Goldname

3
Tôi nghĩ trlà không thích hợp cho các dòng trống. Bạn nghĩ sao? - - Tôi nghĩ sedlà lựa chọn tốt nhất như được mô tả ở đây stackoverflow.com/q/16414410/54964
Léo Léopold Hertz 준영

Để định tuyến đầu ra đến một tệp khác, chỉ cần sử dụng chuyển hướng đầu ra. Để định tuyến nó vào cùng một tệp, hãy dẫn nó đến "bọt biển" (có sẵn trong gói "moreutils" trên hệ thống cơ sở Debian).
plugwash

Để ghi kết quả đầu ra vào cùng một tệp, hãy sử dụng một vỏ conecho -n $(tr -d "\n" < yourfile.txt) > yourfile.txt
andpei

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

Phải thực hiện công việc.


Golfs đếnperl -pie 's/\R//g' filename
Trenton

9
paste -sd "" file.txt

1
Trên Solaris (10) paste -sd ""không hoạt động trên STDIN theo mặc định, vì vậy nếu bạn đang ống với nó, sử dụng: (some command) | paste -sd "" -
JohnGH

Điều này không hoạt động nếu bạn cũng muốn xóa dòng mới cuối cùng . Nó chỉ loại bỏ các dòng mới trung gian.
josch

Điều này không hoạt động trên Mac OS, phiên bản của Sundeep thì có. paste -sd'\0' -
Trenton

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

Hoặc là

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

Hoặc là

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

Trang này ở đây có một loạt các phương pháp khác để xóa dòng mới.

đã chỉnh sửa để xóa lạm dụng mèo :)


4

sử dụng

head -n 1 filename | od -c 

để tìm ra GÌ là nhân vật vi phạm. sau đó sử dụng

tr -d '\n' <filename

cho LF

tr -d '\r\n' <filename

cho CRLF



2

Sử dụng người đàn ông 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

Nerd fact: sử dụng ASCII thay thế.

tr -d '\012' < filename.extension   

(Đã chỉnh sửa vì tôi không thấy câu trả lời có cùng một giải pháp, chỉ khác là tôi có ASCII)


2

Sử dụng sed với các lớp POSIX

Thao tác này sẽ xóa tất cả các dòng chỉ chứa khoảng trắng (dấu cách và tab)

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

Chỉ cần lấy bất cứ thứ gì bạn đang làm và chuyển nó đến đó

Thí dụ

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


sed -i '/ ^ [[: space:]] * $ / d' tên tệp ... để chỉnh sửa tại chỗ; trả lời như sản lượng sẽ ở trên màn hình
BradChesney79


1

Nếu dữ liệu nằm trong file.txt, thì:

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

' $(<file.txt)' Đọc tệp và cung cấp nội dung dưới dạng một chuỗi các từ mà 'echo' sau đó lặp lại với khoảng cách giữa chúng. Sau đó, lệnh 'tr' sẽ xóa bất kỳ khoảng trắng nào:

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

Điều này hoạt động miễn là đầu vào không quá lớn và miễn là bạn đang sử dụng Bash (được gắn thẻ cho Bash, vậy là OK). Bây giờ tôi đang viết câu trả lời tr -d '\n' < file.txt, đó là những gì câu trả lời được chấp nhận làm (và tôi ngạc nhiên là tôi đã không viết nó vào thời điểm đó). Điều này có lẽ chỉ được viết để chỉ ra 'một cách khác để làm điều đó'.
Jonathan Leffler

1

xargs cũng sử dụng các dòng mới (nhưng thêm một dòng mới ở cuối):

xargs < file.txt | tr -d ' '

1

Giả sử bạn chỉ muốn giữ lại các chữ số và dấu chấm phẩy, thao tác sau sẽ thực hiện thủ thuật giả sử không có vấn đề mã hóa lớn nào, mặc dù nó cũng sẽ xóa "dòng mới" cuối cùng:

$ tr -cd ";0-9"

Bạn có thể dễ dàng sửa đổi phần trên để bao gồm các ký tự khác, ví dụ: nếu bạn muốn giữ lại dấu thập phân, dấu phẩy, v.v.


1

Sử dụng trình soạn thảo văn bản gedit (3.18.3)

  1. Nhấp vào Tìm kiếm
  2. Nhấp vào Tìm và Thay thế ...
  3. Nhập \n\svào trường Tìm
  4. Để trống Replace bằng (không có gì)
  5. Chọn hộp Biểu thức chính quy
  6. Nhấp vào nút Tìm

Lưu ý: điều này không giải quyết chính xác vấn đề ban đầu, 7 năm tuổi của OP nhưng sẽ giúp một số người dùng noob linux (như tôi) tìm đường đến đây từ SE với các câu hỏi tương tự "làm cách nào để tải văn bản của tôi tất cả trên một dòng" .


1

Hôm nay đã gặp trường hợp tương tự, cực kỳ dễ dàng trong vim hoặc nvim, bạn có thể sử dụng gJđể nối các dòng. Đối với trường hợp sử dụng của bạn, chỉ cần làm

99gJ

điều này sẽ nối tất cả 99 dòng của bạn. Bạn có thể điều chỉnh số lượng 99khi cần theo số lượng dòng tham gia. Nếu chỉ nối 1 dòng thì thôi gJlà đủ tốt rồi.


0

Tôi sẽ làm điều đó với awk, ví dụ:

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

(một nhược điểm là a được "tích lũy" trong bộ nhớ).

BIÊN TẬP

Quên về printf! Nên cũng

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

hoặc có thể tốt hơn, những gì nó đã được cung cấp trong các ans khác bằng cách sử dụng awk.


0

Tôi thường nhận được usecase này khi tôi đang sao chép đoạn mã từ một tệp và tôi muốn dán đoạn mã đó vào bảng điều khiển mà không cần thêm các dòng mới không cần thiết, tôi đã kết thúc bằng bí danh bash
(tôi đã gọi nó onelinenếu bạn tò mò)

xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i
  • xsel -b -o đọc khay nhớ tạm của tôi

  • tr -d '\n' loại bỏ các dòng mới

  • tr -s ' ' xóa không gian lặp lại

  • xsel -b -i đẩy nó trở lại khay nhớ tạm của tôi

sau đó tôi sẽ dán nội dung mới của khay nhớ tạm vào một dòng trong bảng điều khiển hoặc bất cứ thứ gì.


0

Bạn đang thiếu câu trả lời rõ ràng và nhanh chóng nhất, đặc biệt là khi bạn cần thực hiện điều này trong GUI để sửa một số cụm từ kỳ lạ.

  • Mở gedit

  • Sau đó, Ctrl+ H, sau đó đặt vào Findhộp văn bản \nvà trong Replace withmột không gian trống, sau đó điền vào hộp kiểm Regular expressionvà thì đấy.


0

Để xóa dòng mới ở cuối tệp

python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.