Tôi cần viết một kịch bản đơn giản để thay thế khối văn bản trong tệp cấu hình bằng nội dung của tệp khác.Thay thế khối văn bản được phân tách trong tập tin bằng nội dung của một tệp khác
Giả sử với có các tập tin đơn giản sau đây:
server.xml
<?xml version='1.0' encoding='UTF-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="80" protocol="HTTP/1.1"/>
<Engine name="Catalina" defaultHost="localhost">
<!-- BEGIN realm -->
<sometags/>
<sometags/>
<!-- END realm -->
<Host name="localhost" appBase="webapps"/>
</Engine>
</Service>
</Server>
realm.xml
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
Tôi muốn chạy một kịch bản và có realm.xml
thay thế nội dung giữa <!-- BEGIN realm -->
và <!-- END realm -->
dòng. Nếu realm.xml
thay đổi thì bất cứ khi nào tập lệnh được chạy lại, nó sẽ thay thế lại các dòng với nội dung mới là realm.xml
. Điều này dự định được chạy trong /etc/init.d/tomcat
khi khởi động dịch vụ trên nhiều cài đặt mà trên đó lĩnh vực sẽ khác.
Tôi không chắc chắn làm cách nào tôi có thể thực hiện việc này đơn giản chỉ với awk
hoặc sed
.
Whoa ... nó hoạt động. Tôi đang cố gắng để có được một hang của phân nhánh để thực sự hiểu những gì đang xảy ra. – rmarimon
Nhánh 'ba' để gắn nhãn" a "bên trong dấu ngoặc kết hợp với phép thử cho" BEGIN "và các nhánh' b' đến cuối khi "END" được tìm thấy vì nó nằm trong bộ dấu ngoặc kết hợp với phép thử đó. Nó giống như 'if/BEGIN/sau đó đọc tệp; trong khi không/END/do bỏ qua dòng'. –
Tôi gặp lỗi cú pháp với điều này: 'sed: -e expression # 1, char 39: unexpected '}'' –