반응형
SED (Stream EDitor for filtering and transforming text)
Usage :
sed [OPTION]… {script-only-if-no-other-script} [input-file]…
Option:
-i in place. 현재 파일을 그대로 수정
텍스트 파일의 값을 치환
#set -i "s/대상텍스트/변경텍스트/g" 대상파일
sed -i "s/public/private/g" test.sql
텍스트 파일의 각 라인 끝 문자열을 제거 (혹은 수정)
#sed -i "s/.\{제거할문자수\}$//g" 대상파일
sed -i "s/.\{6\}$//g" test.sql
#만약 제거하고 다른 텍스트를 추가할 경우 하단과 같이 처리
sed -i "s/.\{6\}$/test/g" test.sql
템플릿 파일을 생성후 값을 추가하여 구성 파일 생성
아래와 같이 application의 템플릿 파일을 생성하고, 변경되는 변수를 [[VAR]], [[VAR2]], .. 등으로 템플릿 파일안에 기록한다. 그 후에 sed 명령어와 pipeline 을 통하여 config 파일을 작성한다. sed 의 '-i' 옵션을 줘서 파일 자체를 변경할 수도 있으나, 템플릿 파일의 특성상 변경되는 값들로 새로운 파일을 계속 생성하기 위하여 옵션을 주지 않고 하단과 같이 명령을 수행하여 application.conf 파일을 생성한다.
sed "s/[[VAR1]]/$VAR1/g" /conf/application.conf.template | \
sed "s/[[VAR2]]/$VAR2/g" | \
sed "s/[[VAR3]]/$VAR3/g" | \
sed "s/[[VAR4]]/$VAR4/g" \ > /conf/application.conf
특정 위치를 기점으로 하위 폴더 내의 파일내용을 일괄 변경
특정위치에서 조건에 만족하는 파일의 특정 문구를 일괄 수정하고 싶을 경우에는 sed 명령어와 find 명령어를 결합하여 아래와 같이 사용할 수 있다.
find ./ -name "찾을 파일" -exec sed -i "s/찾을 내용/바꿀 내용/g" {} \;
- 찾을파일 : 와일드카드를 포함하여 주면 특정 확장자의 모든 파일을 대상으로 명령을 수행할 수 있다.
- 찾을내용 : 찾을내용에 (/) 가 포함되는 경우 앞에 역슬래쉬를 추가하여 준다. (ex: / -> \/)
- 바꿀내용 : 위와 동일
활용 예는 아래와 같다.
#현재 경로 하위의 모든 conf 확장자 파일들의 내용 중 "hello" 단어를 "world" 로 변경
find ./ -name "*.conf" -exec sed -i "s/hello/world/g" {} \;
#현재 경로 하위의 모든 yaml 확장자 파일들의 내용 중 "helloworld.com" 을 "helloworld.net" 으로 변경
find ./ -name "*.yaml" -exec sed -i "s/helloworld\/com/helloworld\/net/g" {} \;
'소프트웨어 아키텍처 > Linux' 카테고리의 다른 글
[Linux] Rhel, fedora 환경에 인증서 추가하기 (0) | 2021.11.04 |
---|---|
[Linux] cat 명령을 사용해서 텍스트 파일 만들기 (0) | 2021.11.04 |
Linux - cURL 명령어 사용시 주의점 & 팁 (0) | 2021.10.08 |
git 변경사항 커밋 전에 수정/취소하기 (0) | 2021.09.23 |
Linux shell script : 입력값 검증과 help 문구 (0) | 2021.09.09 |
댓글