2011-12-19 41 views

Trả lời

34
$ sed 's/^ *//; s/ *$//; /^$/d' file.txt 

`s/^ *//` => left trim 
`s/ *$//` => right trim 
`/^$/d` => remove empty line 
+4

'sed -r 's/^ \ s * //; s/\ s * $ //;/^ $/d'' – kev

+0

'sed-r"/^ \ s * \ $/d; s @^\ s * (. *) \ s * \ $ @ \ 1 @ "' - ít 'sed'- "calling" :) – uzsolt

+0

Lưu ý đối với người dùng OS X: câu trả lời tương đương là 'sed -E' s/^ + //; s/+ $ //;/^ $/d 'file.txt' (tương đương với biến thể tổng quát, '\ s' là:' sed -E' s/^ [[: dấu cách:]] + //; s/[[: space:]] + $ //;/^ $/d 'file.txt'. (Không có tùy chọn '-r' cho' sed' trên OS X (từ 10.8); '-E' bật thường xuyên mở rộng biểu thức, hỗ trợ các lớp ký tự '[[:..:]]'-style, nhưng dường như không tương đương như viết tắt của' \ s'.) – mklement0

4

Điều này có thể làm việc cho bạn:

sed -r 's/^\s*(.*\S)*\s*$/\1/;/^$/d' file.txt 
+0

Hoàn hảo! –

2

tương tự, nhưng sử dụng ex biên tập:

ex -s +"g/^$/de" +"%s/^\s\+//e" +"%s/\s\+$//e" -cwq foo.txt 

Đối với nhiều file:

ex -s +'bufdo!g/^$/de' +'bufdo!%s/^\s\+//e' +'bufdo!%s/\s\+$//e' -cxa *.txt 

Để thay thế một cách đệ quy, bạn có thể sử dụng a new globbing option (ví dụ: **/*.txt).

1

Ngay cả phương pháp đơn giản hơn bằng cách sử dụng awk.

cat filename.txt | awk 'NF' | awk '{$1=$1;print}' 

awk 'NF' - Thao tác này sẽ xóa tất cả các dòng trống/trống.

awk '{$1=$1;print}' - Điều này sẽ loại bỏ chỉ dấu không gian màu trắng, (cả trái và phải)

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