Sed để xóa khoảng trống


28

Có ai biết cách sử dụng Sed để xóa tất cả các khoảng trống trong tệp văn bản không? Tôi đã cố gắng sử dụng lệnh xóa "d" để làm như vậy, nhưng dường như không thể tìm ra nó

Câu trả lời:


35

Những loại "không gian"?

Để "xóa tất cả các khoảng trống" có thể có nghĩa là một trong những điều khác nhau:

  1. xóa tất cả các lần xuất hiện của ký tự khoảng trắng, mã 0x20.
  2. xóa tất cả không gian ngang, bao gồm cả ký tự tab ngang, " \t"
  3. xóa tất cả các khoảng trắng, bao gồm cả dòng mới, " \n" và những thứ khác

Công cụ phù hợp cho công việc

Nếu sednó không phải là một yêu cầu cho một số lý do ẩn, tốt hơn nên sử dụng công cụ phù hợp cho công việc.

Lệnh trnày có công dụng chính trong việc dịch (do đó tên "tr") một danh sách các ký tự thành một danh sách các ký tự khác. Như một trường hợp góc, nó có thể dịch sang danh sách trống của các ký tự; Tùy chọn -d( --delete) sẽ xóa các ký tự xuất hiện trong danh sách.

Danh sách các ký tự có thể sử dụng các lớp ký tự theo [:...:]cú pháp.

  1. tr -d ' ' < input.txt > no-spaces.txt
  2. tr -d '[:blank:]' < input.txt > no-spaces.txt
  3. tr -d '[:space:]' < input.txt > no-spaces.txt

Khi khăng khăng sed

Với sed, [:...:]cú pháp cho các lớp ký tự cần được kết hợp với cú pháp cho các bộ ký tự trong biểu thức chính quy [...], dẫn đến kết quả hơi khó hiểu [[:...:]]:

  1. sed 's/ //g' input.txt > no-spaces.txt
  2. sed 's/[[:blank:]]//g' input.txt > no-spaces.txt
  3. sed 's/[[:space:]]//g' input.txt > no-spaces.txt

1
+1, ký hiệu POSIX cho một khoảng trống là cách thích hợp để đi.
Avinash Raj

1
Gợi ý tuyệt vời để sử dụng tr cho nhiệm vụ này, hoạt động tuyệt vời. Điều duy nhất tôi phải điều chỉnh là tr đọc đầu vào từ stdin, vì vậy điều làm việc cho tôi là tr -d ' ' < input.txt > no-spaces.txt.
Bầu trời

Nhận xét của @ Sky hoạt động trong macOS của tôi (không được thử nghiệm trong Linux). Có lẽ câu trả lời nên được cập nhật?
iplus26

Cảm ơn rất nhiều @Sky, đó là thực sự là một lỗi xấu. Bây giờ tôi sẽ sửa ba dòng tr. (Bạn có nhìn thấy nó bất cứ nơi nào khác?)
Volker Siegel

7

Bạn có thể sử dụng để loại bỏ tất cả các khoảng trắng trong file:

 sed -i "s/ //g" file

2
Không có con xúc xắc. Tôi cũng đã thử một cách tiếp cận tương tự. Không hoạt động
Justin

Bạn có muốn xóa khoảng trắng hoặc tab?
Cyrus

1
xóa khoảng trắng
Justin

2
Một bài kiểm tra đơn giản:man sed | sed "s/ //g"
Cyrus

1
@starscream_disco_party: nó giống nhau. Bạn có thể thay thế cả 3 /bằng một ký tự khác, ví dụ:sed "ss ssg"
Cyrus
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.