Sed

Sed 一個 XML 應答器

  • December 23, 2021

拜託,我的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'

引用自:https://unix.stackexchange.com/questions/683620