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
하지만 작동하지 않습니다!
답변1
XML 파서를 사용하여 파일을 구문 분석하고 편집할 수 있습니다. 이 명령은 <ingressAnnonations/>
문서의 어느 위치에서나 태그와 일치하고 해당 내용을 모두 제거합니다.
xmlstarlet edit --update '//ingressAnnotations' --value '' test.xml
산출
<?xml version="1.0"?>
<ingressAnnotations/>
변환이 예상대로 작동한다고 확신하면 --inplace
매개변수(예: 파일을 편집할 수 있는 위치)를 포함합니다.xmlstarlet edit --inplace --update …
답변2
서투르지만 효과적입니다.
$ 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'