2011-09-26 39 views

Trả lời

22

sed không biết về chuỗi thoát như \t. Vì vậy, bạn sẽ phải theo nghĩa đen gõ một tab trên giao diện điều khiển của bạn:

sed 's/^ *$//g' <filename> 

Nếu bạn đang ở trên bash, thì bạn không thể gõ tab trên console. Bạn sẽ phải làm ^V và sau đó nhấn tab. (Ctrl-V và sau đó tab) để in tab chữ.

+8

Nếu sử dụng bash, bạn cũng có thể thực hiện 'sed $ 's/^ \ t * $ // g'', vì sử dụng ký hiệu đô la trên một định dạng chuỗi được trích dẫn một lần các mã như \ t. –

+0

tốt nhất Max! Không biết về nó. Bạn nên đặt câu trả lời đó như một câu trả lời riêng .. –

+0

Bạn đủ gần. :) –

1

Giải pháp được đăng khác sẽ hoạt động khi có 1 (và chỉ 1) trong dòng. Lưu ý rằng Raze2dust chỉ ra rằng sed yêu cầu bạn nhập một tab chữ. Một giải pháp thay thế là:

sed '/[^  ]/!s/ //g' file-name.txt 

Tab này chỉ cách xa các dòng chỉ có tab. Lớp đảo ngược khớp với các dòng có chứa bất kỳ lỗi nào trong tab - sau đây '!' làm cho nó không khớp với các dòng đó - nghĩa là chỉ các dòng chỉ có các tab. Sự thay thế sau đó chỉ chạy trên những dòng đó, xóa tất cả các tab.

2

Để thay thế dòng trắng tùy ý với một dòng trống, sử dụng

sed -r 's/^\s+$//' 

Cờ -r nói để sử dụng biểu thức thông thường kéo dài, và^\ s + $ mẫu phù hợp với tất cả các dòng với một số khoảng trắng nhưng không có nhân vật khác .

-1
grep -o ".*" file > a; mv a file; 
+0

Và điều này làm những gì, chính xác? Bởi vì nó không làm những gì OP hỏi. –

+0

không chắc chắn nếu trolling, nhưng nếu như vậy, rực rỡ .... – ansiart

0

Tôi đã nhận thấy \ t không được UNIX công nhận. Được nói, sử dụng khóa thực tế. Trong mã bên dưới, TAB thể hiện cách nhấn phím tab.

$ sed 's/TAB // g' oldfile> newFile

mũi thân: để đảm bảo bạn có các tab trong file bạn đang cố gắng để loại bỏ các tab từ việc sử dụng đoạn mã sau để xem nếu \ t xuất hiện

$ od -c filename

Các vấn đề liên quan