Cách xóa tất cả khoảng trắng khỏi một tệp văn bản nhất định


81

Tôi muốn xóa tất cả các khoảng trắng khỏi một tệp văn bản nhất định. Có lệnh shell nào cho việc này không? Hoặc, làm thế nào để sử dụng sedcho mục đích này.

Tôi muốn một cái gì đó như dưới đây:

$ cat hello.txt | quyến rũ ....

Tôi đã thử điều này: cat hello.txt | sed 's/ //g'.Nhưng nó chỉ xóa khoảng trắng, không xóa tab.


3
bởi "tất cả khoảng trắng", bạn có nghĩa là cả dòng mới?
glenn Jackman

Câu trả lời:


132
$ 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.

Để xóa tất cả khoảng trắng bao gồm cả dòng mới, bạn có thể thử:

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

Bạn cũng có thể sử dụng các lớp ký tự được xác định bởi tr (tín dụng cho nhận xét htompkins ):

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

Ví dụ: để chỉ xóa khoảng trắng ngang:

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

23
Bạn cũng có thể sử dụng các lớp ký tự được xác định bởi tr. Ví dụ: Để xóa tất cả các khoảng trắng: cat file.txt | tr -d "[:space:]" Để xóa tất cả khoảng trắng ngang:cat file.txt | tr -d "[:blank:]"
htompkins

@ user3901666 nó sẽ loại bỏ khoảng trắng, vâng, nếu kết quả được tạo ra sẽ khớp với những gì bạn muốn thì thật khó nói - bạn đã thử làm gì?
Paulo Scardine

24

Đơn giản hơn nhiều theo ý kiến ​​của tôi:

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

2
Tôi vừa thử điều này và nó xuất văn bản sửa đổi thành STDOUT nhưng không thay đổi chính tệp.
Max Williams,

4
@MaxWilliams - chỉ cần sử dụng cờ -i (dấu gạch ngang i) với sed
JeffCharter

1
Điều này không loại bỏ các dòng mới, không chắc chắn liệu đó có được OP muốn hay không.
Graeme Moss

11

Tôi nghĩ bạn có thể sử dụng sed để xóa sạch không gian trong khi không bị mất một số thông tin như thay đổi sang một dòng khác.

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

4
Tốt, nhưng tôi không nghĩ rằng tôi sẽ có thể mang lại bản thân mình để ghitr -d " " < infile.txt > outfile.txt
NReilingh

Xin chào, điều này làm việc, cảm ơn, nhưng tôi sẽ đánh giá cao một số giải thích.
David Okwii

10

Thử đi:

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

(tìm thấy ở đây )

Phần đầu tiên xóa tất cả các tab ( \t) và dấu cách, và phần thứ hai xóa tất cả các dòng trống


Điều này thực sự hoạt động. Chú ý giải thích sed -e 's / [\ t] // g; / ^ $ / d' cụ thể là / ^ $ / d '. Tôi biết ^ là đầu chuỗi, $ là cuối. / d là để xóa khi sử dụng sed. Nhưng cách giải thích này dẫn đến việc xóa các khoảng trắng?
David Okwii

Tôi đã thêm một lời giải thích. ^$khớp với một dòng trống vì nó đang tìm kiếm "đầu dòng" (^) và ngay sau đó, "cuối dòng" ($).
keyer

5

Nếu bạn muốn xóa TẤT CẢ khoảng trắng, ngay cả các dòng mới:

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

4

Cách dễ nhất cho tôi ->

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

2

Đây có lẽ là cách đơn giản nhất để thực hiện:

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

2

Thử đi:

tr -d " \t" <filename

Xem trang chủ cho tr (1) để biết thêm chi tiết.


2

Anh bạn, chỉ cần python test.py trong thiết bị đầu cuối của bạn.

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()

Xin lỗi khi đụng một chủ đề cũ, nhưng không f.read().strip("\t\n\r ")hiệu quả hơn?
Jachdich

Điều gì sẽ xảy ra nếu có hai hoặc nhiều dấu cách, tab, v.v. b / w từ tiếp theo? Tôi nghĩ giải pháp của bạn là dành cho khoảng trắng ở đầu và cuối. Nếu bạn muốn có một lớp lót, bạn có thể dễ dàng chuyển đổi mã trên.
Agnibesh Chauhan

2

Câu trả lời này tương tự như câu trả lời khác, tuy nhiên, một số người đã phàn nàn rằng đầu ra chuyển đến STDOUT, tôi sẽ đề xuất chuyển hướng nó đến tệp gốc và ghi đè nó. Tôi thường không bao giờ đề xuất điều này nhưng đôi khi công việc nhanh chóng và bẩn thỉu.

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

1

hmm ... có vẻ như thứ gì đó theo thứ tự sed -e "s/[ \t\n\r\v]//g" < hello.txtphải ở đúng sân bóng (có vẻ như hoạt động dưới quyền của cygwin trong mọi trường hợp).

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.