YAML文件中使用sed

做demo測試時 ,kubectl exec 進入pod內部,執行

sed -i 's/\]\[/,/'  learn-instances.json

可以success,滿足需求,將learn-instances.json中的字符串“][” 替換爲“,” 

放入yaml文件的shell -c 參數中執行,整條command line需要加雙引號(soft quote),雙引號中除了$ `兩個符號保留原有特性,其他字符功能被關閉。要想保留需要加轉義字符。

本字符串's/\]\[/,/' 中“'” 和“\”爲特殊字符,需要加轉義字符, 變成 \'s/\\]\\[/,/\'

containers:
      - name: retrieve-instance-data
        image: saas/sun-java8-build:1353
        args:
        - /bin/sh
        - -c
        - "while true; do curl -sL ${JENKINS_JOB_URL} -o ${NGINX_BASE_DIR}/regular-learn-instances.json; curl -sL ${PERF_JENKINS_JOB_URL} -o ${NGINX_BASE_DIR}/perf-learn-instances.json; cat ${NGINX_BASE_DIR}/regular-learn-instances.json ${NGINX_BASE_DIR}/perf-learn-instances.json > ${NGINX_BASE_DIR}/learn-instances.json; sed -i \'s/\\]\\[/,/\' ${NGINX_BASE_DIR}/learn-instances.json; sleep 900; done"

 

總結: sed 功能 本身字符 '' 和\ 爲功能字符,必須保留其功能含義,不能被放在雙引號中關閉功能。

雙引號中的 sed的單引號 需要加轉義字符。

雙引號中轉義字符 需要再加轉義字符。

\\]   兩層轉義 之所以這樣寫 第一層轉義是爲了因爲放在sed語句的紅色的單引號中,第二層轉義是爲了保留放在最外層綠色的 雙引號中的特性。

\' 一層轉義,是因爲放在最外層綠色的雙引號

 

同理,YAML文件中使用awk一樣的道理,注意awk中 {} 的功能符號。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章