2012-12-20 35 views
6

Tôi cần xóa các dòng trống khỏi một tệp (chỉ với dấu cách - không phải bản ghi rỗng).Xóa các dòng trống từ một tệp

Các công trình lệnh sau đây chỉ cho các hàng null, nhưng không phải trong trường hợp gian:

sed '/^$/d' filename

Nó có thể được thực hiện bằng grep?

+0

kiểm tra ở đây: http: //theunixshell.blogspot.com/2013/01/deleting-empty-lines-from -file.html – Vijay

Trả lời

12

Sử dụng \s* cho dòng trống chỉ chứa khoảng trắng:

sed '/^\s*$/d' file 

Để lưu các thay đổi trở lại file sử dụng -i tùy chọn:

sed -i '/^\s*$/d' file 

Edit:

Các regex ^\s*$ trận đấu một dòng chỉ chứa khoảng trắng, grep -v các dòng in không khớp với một mẫu nhất định sau đây sẽ in tất cả các dòng màu đen không:

grep -v '^\s*$' file 
+0

nó hoạt động thanxx ........ –

+0

Nếu bạn biết rằng các dòng trống không có khoảng trắng, thì bạn có thể giảm grep đó thành 'grep. tệp'. –

+1

chỉ để hoàn thành: 'awk' NF 'file' –

0

Đã xảy ra tệp được sao chép từ máy Windows lệnh sed (sed '/^$/d' foo) không hoạt động chính xác.

Tôi chạy lệnh sau và nó hoạt động.

$ dos2unix foo

1
sed -i '/^[ \t]*$/d' file-name 

nó sẽ xóa tất cả các dòng trống có bất kỳ không. không gian trắng (khoảng trắng hoặc tab) tức là (0 hoặc nhiều hơn) trong file ..

lưu ý: có một 'không gian' tiếp theo '\ t' bên trong khung vuông ...

"-i "sẽ buộc phải ghi nội dung cập nhật trở lại trong tệp ... mà không có cờ này, bạn có thể thấy các dòng trống đã bị xóa trên màn hình nhưng tệp thực sự sẽ không bị ảnh hưởng.

1

Các POSIX cách cầm tay để làm điều này là

sed -i '/^[[:blank:]]*$/d' file 

hoặc

grep -v '^[[:blank:]]*$' file 
Các vấn đề liên quan