스크립트로 파일 내 문자열 수정 할 경우. 유용한 예제.

 

 

정규식

. -> 모든 문자

* -> 0개 이상

? -> 1개 또는 0개

 

예제 1

sed -i "s/\(# \)\?registry_host:.*/registry_host: \"${PRIVATE_REGISTRY}\"/" offline.yml

sed -i 's/\(# \)\?docker_insecure_registries:/docker_insecure_registries:/' offline.yml

-> 변수를 받을 경우 쌍따옴표(") 사용.

-> 변수가 있는데 따옴표(')를 사용한다면 문자 그대로 출력 ex) ${PRIVATE_REGISTRY}

->  \(# \)\? 원래 형태는 (# )? 이며, 특수문자이기 때문에 역슬래시(\)로 체크

->  (# )?registry_host 의미는 registry_host 또는 # registry_host를 의미 함

 

 

예제 2

sed -i "/docker_insecure_registries:/a\  - ${PRIVATE_REGISTRY}" docker.yml

sed -i '/docker_insecure_registries:/a\  - brightforest.com' docker.yml

-> a 옵션은 docker_insecure_registries: 다음라인에   - ${PRIVATE_REGISTRY} 를 추가

-> i 옵션은 이전 라인에 추가

 

 

예제 3

sed -i "s/container_manager: .*/container_manager: ${CLUSTER_RUNTIME/" k8s-cluster.yml

sed -i "s|kube_service_addresses: .*|kube_service_addresses: ${SERVICE_NETWORK}|" k8s-cluster.yml

-> 구분자로 /와 | 모두 사용 가능

-> path가 들어갈 경우 역슬래시를 써야해서 구분자 /를 쓰면 귀찮아짐

-> path가 있을 경우 구분자 |를 사용하면 역슬래시를 안써도 되서 편함.

 

 

예제 4

sed -i "s/\(# \)\?http_proxy: .*/http_proxy: /"http:/\/\${PROXY_SERVER}\"/" all.yml

sed -i "s/127\.0\.0\.1:6443/${MASTER0_IP}:6443/g" kube-admin.conf

-> 점(.) 앞에도 역슬래시(\)를 써야 함

 

 

 

옵션 참고

https://jhnyang.tistory.com/m/287

+ Recent posts