Devops/Linux
[Linux/Ubuntu] txt / yaml 등의 파일 문자열 치환(변경)
dev_ss
2023. 8. 26. 00:13
최근의 다량의 yaml 파일의 특정 단어를 다른 단어로 수정을 하는 일이 있었는데, 그 과정에 많은 도움이 된 명령어이다.
Linux의 sed라는 명령어를 통하여 일괄적으로 수정하는데 많은 도움을 받았고 아래 예제를 통해 알아볼 것이다.
- sed : stream edit이라는 단어의 축약
기본적으로 sed 명령어는 s로 시작하여 g로 끝나고 그 사이를 /로 구분하여 바꿀 단어와 바뀔 단어로 구분한다.
- sed "s/변경하고 싶은 단어/변경할 단어/g"
아래는 텍스트를 예시로 들어볼 것이다.
# bash
cat simple.txt
# ---------- 출력 ---------- #
hello world!
simple.txt라는 텍스트 파일이 존재하고 내용은 hello world!라는 텍스트를 저장하고 있다.
여기서 hello를 bye로 수정을 하고 싶을 때, 아래 명령어를 사용하면 된다.
# bash
sed "s/hello/bye/g" simple.txt
# ----------- 출력 ----------- #
bye world!
하지만 이는 실제로 바뀐 부분을 출력만 해주고 저장은 하지 않는다.
그렇기 때문에 별도로 저장을 하거나 옵션을 지정하면 된다.
아래를 통하여 방법을 알 수 있다.
# bash
# 옵션을 통한 저장
sed -i "s/hello/bye/g" simple.txt
# 파일 생성
sed "s/hello/bye/g" simple.txt > simple2.txt
위 방법 중 첫 번째 방법은 덮어쓰고 저장하고, 두 번째 방법은 새로운 파일을 생성한다.
+ 아래와 같이 텍스트 뿐만이 아닌 다양한 파일 형식에도 사용할 수 있다.
# bash
cat test.yaml
# --------------- 출력 ------------------ #
apiVersion: v1
kind: Pod
metadata:
name: my-pod-1
labels:
app: myapp
tier: back-end
spec:
containers:
- name: nginx
image: nginx:latest
# --------------- 출력 ------------------ #
# 단어 치환
sed "s/my-pod-1/my-pod-2/g" test.yaml > test2.yaml
# 확인
cat test2.yaml
# --------------- 출력 ------------------ #
apiVersion: v1
kind: Pod
metadata:
name: my-pod-2
labels:
app: myapp
tier: back-end
spec:
containers:
- name: nginx
image: nginx:latest
# --------------- 출력 ------------------ #
※ 주의할 점 : 바꾸고 싶은 단어가 매칭되는 단어를 전부 바꿔주기 때문에, 정확한 명령어로 이용해야 된다.
반응형