Gọi điện tới sed
để viết tập lệnh sed và một ứng dụng khác để sử dụng? Nếu danh sách của bạn là trong các tập tin listA
và listB
, sau đó:
paste -d : listA listB | sed 's/\([^:]*\):\([^:]*\)/s%\1%\2%/' > sed.script
sed -f sed.script files.to.be.mapped.*
Tôi đang làm cho một số giả định sâu rộng về 'từ' không chứa hoặc thư đại tràng hoặc các ký hiệu phần trăm, nhưng bạn có thể điều chỉnh xung quanh đó. Một số phiên bản của sed
có giới hạn trên về số lượng lệnh có thể được chỉ định; nếu đó là vấn đề vì danh sách từ đủ lớn, bạn có thể phải tách tập lệnh sed đã tạo thành các tệp riêng biệt được áp dụng - hoặc thay đổi để sử dụng thứ gì đó không có giới hạn (ví dụ: Perl).
Một mục khác cần lưu ý là chuỗi các thay đổi. Nếu bạn muốn trao đổi hai từ, bạn cần phải cẩn thận các danh sách từ của bạn. Nói chung, nếu bạn ánh xạ (1) wordA thành wordB và (2) wordB thành wordC, điều quan trọng là kịch bản sed có ánh xạ (1) trước hoặc sau khi ánh xạ (2).
Tập lệnh được hiển thị không cẩn thận về ranh giới từ; bạn có thể làm cho nó cẩn thận về chúng theo nhiều cách khác nhau, tùy thuộc vào phiên bản của sed
bạn đang sử dụng và tiêu chí của bạn cho những gì cấu thành từ.
Nguồn
2011-08-25 22:52:44
Đẹp, tổng thể, nhưng với một vấn đề tiềm năng. Giải pháp này không nhất thiết phải giữ khoảng cách giữa các dòng trên các dòng thay đổi được thực hiện; các khoảng trắng được thay đổi thành các khoảng trắng. Vì chúng ta không biết bản chất của văn bản, nó có thể không phải là một vấn đề và thậm chí có thể trở thành một lợi thế. Dù sao, 1 từ tôi. –
Điều này rõ ràng là hiệu quả hơn so với giải pháp dưới đây viết kịch bản lệnh sed. Kết thúc trong 3 phút những gì đã 3 ngày sử dụng các giải pháp sed. Cũng chỉ thay thế toàn bộ từ, mặc dù đây không phải là những gì được hỏi. –
Điều này giải quyết mục đích, nhưng làm thế nào để bảo tồn các khoảng trắng? Nó xuất hiện kịch bản awk thay thế chúng chỉ với một khoảng trắng. – Guru