본문 바로가기
Devops/Linux

[Linux/Ubuntu] txt / yaml 등의 파일 문자열 치환(변경)

by dev_ss 2023. 8. 26.

 

 

최근의 다량의 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
# --------------- 출력 ------------------ #

 

※ 주의할 점 : 바꾸고 싶은 단어가 매칭되는 단어를 전부 바꿔주기 때문에, 정확한 명령어로 이용해야 된다.

 

 

 

반응형