Sed
Sed 一個 XML 應答器
拜託,我的
test.xml
文件中有這個 xml 應答器<ingressAnnotations>nginx.ingress.kubernetes.io/server-snippet: | location @custom_503 { return 503 "<html> <head> <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'> <style>...</style></head> <body><img src='https://www.jenkins.io/images/logos/jenkins-is-the-way/j enkins-is-the-way.png' width='200' height='200' style='display: block; margin-left: auto; margin-right: auto;' alt='jenkins'><center><h2>Jenkins is sleeping, please go to jenkins.betclic.net and click your Maste r link to wake him up. It will be available in a few minutes. This is the wait !!!</h2></center></body></html>"; } error_page 503 @custom_503;</ingressAnnotations>
我必須解析我的文件並刪除內容。像這樣的東西:
<ingressAnnotations></ingressAnnotations>
請問我怎麼能通過 sed 做到這一點?我正在嘗試這個:
sed -i 's/<ingressAnnotations>*<\/ingressAnnotations>/<ingressAnnotations><\/ingressAnnotations>/g' test.xml
但它不起作用!
您可以使用 XML 解析器來解析和編輯您的文件。此命令匹配
<ingressAnnonations/>
文件中任何地方的標籤並刪除其所有內容:xmlstarlet edit --update '//ingressAnnotations' --value '' test.xml
輸出
<?xml version="1.0"?> <ingressAnnotations/>
一旦您確定轉換按預期工作,請包含
--inplace
參數(即)以編輯文件xmlstarlet edit --inplace --update …
笨拙,但有效:
$ sed -n '/<ingressAnnotations>/{p; :a; N; /<\/ingressAnnotations>/!ba; s/.*\n//}; p' \ FILENAME | sed -e 's/>.*/>/g' -e 's/.*<\//<\//g'
以上給出:
<ingressAnnotations> </ingressAnnotations>
已編輯。
要刪除模式之間的換行符,請添加
| sed -e ':a;N;$!ba;s/\n//g'
管道,因此:$ sed -n '/<ingressAnnotations>/{p; :a; N; /<\/ingressAnnotations>/!ba; s/.*\n//}; p' \ FILENAME \ | sed -e 's/>.*/>/g' -e 's/.*<\//<\//g' \ | sed -e :a;N;$!ba;s/\n//g'