본문 바로가기
Linux/Shell script

sed 실전 응용 경로를 바꾸고 싶을 때, file로 저장방법까지

by 개폰지밥 2021. 9. 27.
반응형

| sed 기초 편 참고: https://seul96.tistory.com/315

 

sed 사용법 및 예시

최근에 고객사마다 환경이 다르기 때문에 ip주소와 경로를 매번 수정해줘야했는데, window 환경에 notepad++과 같은 tool이 설치 되어있으면 ctrl+f를 이용하여 전체적인 수정이 가능하지만, command line

seul96.tistory.com

 

| sed 실전응용1 : ip 주소를 10.10.30.34에서 127.0.0.1로 모두 변경

테스트를 위해 ip 주소가 포함된 ipsedtest.txt를 만듬

vi ipsedtest.txt
#FIDO Server URL
fido.server.domain=http://10.10.30.34/MagicFIDO2Server/
 
##FIDO RP URL
fido.rp.server.domain=https://10.10.30.34/MagicFIDO2Server/
fido.rp.access.ipconfig.path=/home/magicfido/tomcat9/webapps/MagicFIDO2Server/WEB-INF/config/allow.conf
fido.certification.path=/home/magicfido/tomcat9
fido.certification.file.pem=10.10.30.34.pem
fido.server.ssl.auto.change.target.url=https://10.10.30.34
 
fido.rp.federation.reg.return.url={"www.da.com":"http://10.10.30.34:18080/MagicFIDO2Server/getFIDOResultTest.jspx"\,
 
fido.token.encryption.rsa.privatekey.path=/home/magicfido/tomcat9/webapps/MagicFIDO2Server/WEB-INF/config/private.der
 
#FIDO Server JWT token RAS public key file path(if using JWT > RSA)
 
tca=/home/magicfido/tomcat9/webapps/MagicFIDO2Server/WEB-INF/config/KISARootCA4.der
fido.official.mds.root.cert.path=/home/magicfido/tomcat9/webapps/MagicFIDO2Server/WEB-INF/config/iop/Root.cer
 
#FIDO Certificate fingerprint multi check
fido.multi.certificate.fingerprint=/home/magicfido/tomcat9/webapps/MagicFIDO2Server/WEB-INF/config/fingerprint.txt

 

변경방법

sed s/10.10.30.34/127.0.0.1/g ipsedtest.txt

 

| sed 실전응용2 : 경로 변경하기

예를 들어 /home/magicfido의 경로를 /home/fido로 변경하고 싶을 때 아래와 같이 sed 명령어를 쓰면 에러가 난다.

[fido@localhost ~]$ sed s//home/magicfido//home/fido//g ipsedtest.txt

sed: -e expression #1, char 10: unknown option to `s'

sed의 치환자가 경로를 구분해주는 /와 동일하기 때문이다.

 

그렇다면 경로를 변경하고 싶을 때는 어떻게 해야할까?

 

sed의 같은경우 치환자를 /이외에 많은 것들로 바꿀 수 있다.

예를 들어 @로도 바꿀 수 있다.

[fido@localhost ~]$ sed s@/home/magicfido/@/home/fido/@g ipsedtest.txt 

따라서 경로처럼 /가 들어가는 것을 치환할 경우 치환자를 변경해주는 것이 좋다.

 

| sed 실전응용3 : file 저장하기

sed 명령어는 필터 명령어로 실제 file에 영향을 주지 않습니다. 그렇다면 치환된 file을 저장하고 싶을 때는 어떻게 해야할까? 두가지가 방법이 존재한다.

1. 중간파일을 만들어서 덮어쓰기

sed s@/home/magicfido/@/home/fido/@g ipsedtest.txt 

위에서 실행한 명령어의 결과를 저장하고 싶을 때는 아래와 같이 하면 된다.

[fido@localhost ~]$ sed s@/home/magicfido/@/home/fido/@g ipsedtest.txt > ipsedtest.txt.bak

즉 sed로 치환한 결과값을 ipsedtest.txt.bak에 저장한다는 소리이다.

 

두번째 방법은 중간파일을 만들지 않고 sed 명령어에 잇는 원래 파일을 덮어쓰는 -i 옵션을 사용할 수 있다.

 

2. sed -i 이용하기

우선 위에서 만들었던 bak file을 지우고 sed -i 옵션을 이용하고 뒤에 .bak 확장자를 붙여서 백업할 수 있습니다.

[fido@localhost ~]$ rm ipsedtest.txt.bak --기존에 만든 bak file 지우기
[fido@localhost ~]$ sed -i.bak "s@/home/magicfido/@/home/fido/@g" ipsedtest.txt

 

다음에는 sed를 이용하여 쉘 스크립트 만든것을 가져오도록 하겠습니다!

반응형

댓글