做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中 {} 的功能符號。