Thay thế tất cả các khoảng trắng bằng dấu phẩy trong tệp văn bản


10

Tôi cần thay thế tất cả các khoảng trắng bên trong văn bản của mình bằng dấu phẩy. Tôi hiện đang sử dụng dòng này nhưng nó không hoạt động: Tôi nhận được như là một tệp văn bản giống hệt với tệp gốc:

sed 's/[:blank:]+/,/g' orig.txt > modified.txt

cảm ơn


sed 's / [[: blank:]] \ + /, / g'
Mug896

@ Mug896 làm việc cho tôi trên Ubuntu 18.04 Tôi cần dấu ngoặc vuông và \ trước dấu +
dmontaner

Câu trả lời:


14

Với sed:

sed -e 's/\s\+/,/g' orig.txt > modified.txt

Hoặc với perl:

perl -pne 's/\s+/,/g' < orig.txt > modified.txt

Chỉnh sửa: Để loại trừ các dòng mới trong perl, bạn có thể sử dụng phủ định kép 's/[^\S\n]+/,/g'hoặc khớp với chỉ các ký tự khoảng trắng bạn chọn 's/[ \t\r\f]+/,/g'.


Tuy nhiên, cảm ơn vẫn còn một vấn đề: Tôi không muốn thay thế "dòng tiếp theo \ n" bằng dấu phẩy và lệnh bằng perl hiện đang thực hiện. Cô ấy ra lệnh cho bạn viết, nó vẫn không hoạt động.
aneuryzm

Xin lỗi bạn cần phải thoát khỏi +toán tử trong sed, tôi chỉ cập nhật câu trả lời của tôi. Các dòng mới là whitepsace trong perl, vì vậy bạn sẽ phải thực hiện lớp whitepsace của mình theo cách thủ công nếu bạn không bao gồm nó. Tôi đã thêm hai giải pháp cho điều đó như chào đón.
Caleb

12

Sử dụng tr:

tr -s '[:blank:]' ',' <file

Điều này sẽ thay thế bất kỳ khoảng trắng ngang bằng dấu phẩy. Bất kỳ khoảng trắng lặp lại sẽ chỉ được thay thế bằng một dấu phẩy.


-1
awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 

Ở đây tên tệp là Máy chủ .. Nó chứa nội dung bên dưới ..

Server1
Server2
Server3

Nếu chúng ta sử dụng lệnh trên, chúng ta có thể nhận được đầu ra bên dưới ..

Server1,Server2,Server3,


[mohramak@oc3246038448 Desktop]$ cat Servers
Server1
Server2
Server3
[mohramak@oc3246038448 Desktop]$ awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 
Server1,Server2,Server3,
[mohramak@oc3246038448 Desktop]$ 
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.