2009-12-20 42 views
10

Trình bao của tôi có cuộc gọi đến 'tài sản' trong tệp .login của tôi, để cung cấp cho tôi một thông điệp nhỏ trong ngày. Tuy nhiên, một số vận may bắt đầu với một dòng khoảng trắng hàng đầu, một số bắt đầu bằng hai, và một số không có bất kỳ dòng trắng nào ở đầu. Điều này lỗi tôi.Xóa khoảng trắng hàng đầu từ Tệp

Tôi ngồi xuống tài sản bao bọc với tập lệnh shell của riêng mình, sẽ loại bỏ tất cả khoảng trắng hàng đầu khỏi đầu vào, mà không phá hủy bất kỳ định dạng nào của tài sản thực, có thể cố ý có các khoảng trắng.

Nó dường như không dễ dàng trong một phút, và khi tôi đọc (sậy) thông qua các trang người đàn ông cho sed và grep, tôi nghĩ tôi sẽ hỏi khách hàng tuyệt vời của chúng tôi ở đây.

+0

bạn có thể hiển thị một cách rõ ràng tài sản mẫu và điểm những phần nào bạn muốn thay đổi và phần nào bạn xem là một phần của định dạng không nên thay đổi. – SiegeX

Trả lời

16

Sử dụng nguồn giống như Dav:

# delete all leading blank lines at top of file 
sed '/./,$!d' 

Nguồn: http://www.linuxhowtos.org/System/sedoneliner.htm?ref=news.rdf

Thêm vào đó, đây là lý do tại sao công trình này:

Dấu phẩy ngăn cách một "phạm vi" hoạt động. sed có thể chấp nhận cụm từ thông dụng cho định nghĩa phạm vi, do đó, /./ khớp với dòng đầu tiên có "bất cứ điều gì" (.) trên đó và $ chỉ định phần cuối của tệp. Do đó,

  • /./,$ khớp "dòng đầu tiên không trống vào cuối tệp".
  • ! sau đó đảo ngược lựa chọn đó, làm cho nó có hiệu quả "các dòng trống ở đầu tệp".
  • d xóa các dòng đó.
+0

Hoàn hảo !! Cảm ơn nhiều!! Liên kết sẽ chứng minh rất hữu ích trong tương lai. – Maarx

+2

Có vẻ như rõ ràng hơn để viết: sed -n '/./,$p' –

+0

Để làm việc này với các tệp java ~ 30K tôi cần để xử lý, tôi chạy "find. -name '* .java' | xargs - n 1 sed -e '/./,$!d' -i .bak "-" -n 1 "là cần thiết để sed hoạt động chính xác – Phil

1

Làm thế nào về:

sed "s/^ *//" < fortunefile 
+1

Tại sao điều này lại bị bỏ phiếu? Đây là cách tôi đọc yêu cầu của OP. – SiegeX

0

tôi không chắc chắn về cách thức thông điệp may mắn của bạn thực sự trông như thế nào, nhưng đây là một minh hoạ

$ string="  my message of the day" 
$ echo $string 
my message of the day 
$ echo "$string" 
     my message of the day 

hoặc bạn có thể sử dụng awk

echo "${string}" | awk '{gsub(/^ +/,"")}1' 
Các vấn đề liên quan