2012-04-18 33 views
15

Tôi có một công cụ mã nguồn đóng kích thích ghi thông tin cụ thể vào tệp cấu hình của nó. Nếu sau đó bạn cố gắng sử dụng cấu hình trên một tệp khác, thì tệp sẽ tải tệp cũ. Grrr ...Làm cách nào để xóa tất cả các dòng khớp với mẫu từ một tập hợp các tệp?

May mắn thay, các tệp cấu hình là văn bản, vì vậy tôi có thể kiểm soát phiên bản và chỉ ra rằng nếu bạn chỉ xóa dòng vi phạm khỏi tệp thì không có hại gì được thực hiện.

Nhưng công cụ này vẫn tiếp tục đặt các dòng trở lại. Vì vậy, mỗi khi tôi muốn kiểm tra phiên bản mới của tệp cấu hình, tôi phải xóa tất cả các dòng có chứa ký hiệu openDirFile.

Tôi sắp xây dựng một số lệnh bash để chạy grep -v trên mỗi tệp, lưu kết quả vào tệp tạm thời, sau đó xóa bản gốc và đổi tên tạm thời, nhưng tôi tự hỏi liệu có ai biết giải pháp sạch đẹp, hoặc đã pha chế và gỡ lỗi một lời gọi tương tự.

Để có thêm tín dụng, làm thế nào điều này có thể được thực hiện mà không phá hủy một liên kết tượng trưng trong cùng một thư mục (favourite.rc-> signals.rc)?

Trả lời

18
sed -i '/openDirFile/d' *.conf 

này làm loại bỏ trên tất cả các file conf

bạn cũng có thể kết hợp phù hợp với "tìm thấy" lệnh nếu file conf của bạn đang nằm ở con đường khác nhau.

Lưu ý rằng -i sẽ thực hiện việc xóa "tại chỗ".

+0

tuyệt vời, làm sao tôi không biết về điều này? –

0

Đây là bash đánh vần mà tôi đã đưa ra: Câu trả lời

for i in *.rc ; do TMP=$(mktemp) ; grep -v openDirFile ${i} >${TMP} ; mv ${TMP} ${i} ; done 

Kent là vượt trội hơn hẳn.

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