반응형
sed 기초 관련 : https://seul96.tistory.com/315
sed 응용 관련 : https://seul96.tistory.com/320
1.1. sed를 이용한 shell script
version1을 가장 먼저 만들었고 version3을 가장 나중에 만들었습니다.
단순히 치환만 한경우에는 version1 스크립트를 이용하시면 되고, 동일파일 치환, 파일명과 경로 받아오기, 파일저장, “/”와 같은 경로 치환 등까지 하고 싶으면 version3 sed_file_save.sh 스크립트를 이용하시면 됩니다.
(맨 아래 표에 자세히 설명되어있습니다)
# version3
치환 더 이상 하고 싶은 게 없을 때까지 반복 후 치환된 file을 기존 file명 + 오늘 날짜로 저장한다.
vi sed_file_save.sh |
#!/bin/bash echo -e "\033[47;31m 치환을 시작합니다\033[0m " echo -n "regexp : " read regexp echo -n "replacement : " read replacement echo -n "file_location : " read file_location echo -n "filename: " read filename cd $file_location sed s@$regexp@$replacement@g $filename > tmp echo -e "\033[47;31m 치환을 완료하였습니다\033[0m " echo -n "if you wanna substitute more? y|n : " read var # 치환반복 while [ $var = "y" ] do echo -e "\033[47;31m 치환을 계속 합니다\033[0m " echo -n "regexp: " read regexp echo -n "replacement: " read replacement sed -i.bak "s@$regexp@$replacement@g" tmp echo -e "\033[47;31m 치환을 완료하였습니다\033[0m " echo -n "if you wanna substitute more? y|n : " read var done #더이상 sed를 안할 때 if [ $var = "n" ]; then echo -n "do you wanna save file? y|n : " read save #file 저장 if [ $save = "y" ]; then mv tmp "${filename}_$(date "+%Y-%m-%d")" echo -e "\033[47;31m 파일을 저장합니다\033[0m " else rm tmp* fi fi rm tmp* echo -e "\033[47;31m 쉘스크립트를 종료합니다\033[0m " |
[과정]
file_location은 치환하고 싶은 file의 위치
filename은 치환하고 싶은 file명
그 후에 치환을 반복하면 그 위치의 파일이 계속해서 치환된다.
[결과]
치환된 file 오늘날짜로 자동생성
# version2
vi substitute_save2.sh | |
설명 : 치환을 더 이상 할 수 없을 때까지 반복하는 후 기존 파일에 오늘 날짜명을 받아 치환된 파일 저장 또한 file명의 위치를 받아 이동 한다. |
|
#!/bin/bash var="y" echo echo "========= 치환을 시작합니다=============" while [ $var = "y" ] do echo -n "regexp: " read regexp echo -n "replacement: " read replacement echo -n "file_location: " read file_location echo -n "filename: " read filename cd $file_location echo "==========================================" sed s/$regexp/$replacement/g $filename echo "=========================================" echo -n "if you wanna substitute more? y|n : " read var done if [ $var = "n" ]; then echo -n "do you wanna save file? y|n : " read save if [ $save = "y" ]; then sed s/$regexp/$replacement/g $filename > "${filename}_$(date "+%Y-%m-%d")" fi echo "쉘 스크립트를 종료합니다" fi |
|
결과 | |
[fido@localhost ~]$ ./substitute_save2.sh =========== 치환을 시작합니다============= regexp: 10.10.30.34 replacement: 127.0.0.1 file_location: /home/fido/MagicFIDO/tomcat9/Server/webapps/MagicFIDO2Server/WEB-INF/config/fido filename: fido.properties ======================================= ############################# # Common Config ############################# #FIDO Server URL fido.server.domain=http://127.0.0.1/MagicFIDO2Server/ include=default.properties =============================== if you wanna substitute more? y|n : n do you wanna save file? y|n : y 쉘 스크립트를 종료합니다 |
…이하 생략 치환 결과 file |
기타 | |
sed의 구분자가 “/” 이기 때문에 경로와 같은 것을 치환할 때 에러문구를 뱉어낸다. 경로 치환도 될 수 있게 version3 만들기 |
# version1
vi substitute.sh | |
설명 : 치환 할것이 없을 때까지 반복하는 스크립트 | |
#!/bin/bash var="y" echo echo "=========== 치환을 시작합니다===========" while [ $var = "y" ] do echo -n "regexp: " read regexp echo -n "replacement: " read replacement echo -n "filename: " read filename echo "========================================" sed s/$regexp/$replacement/g $filename echo "========================================" echo -n "if you wanna substitute more? y|n : " read var done if [ $var = "n" ]; then echo "쉘 스크립트를 종료합니다" fi |
|
결과 | |
[fido@localhost ~]$ cat sedtest.txt tomcat was jeus was jboss was wildfly was oracle db tibero db postgresql db cubrid db mysql db mssql db mariadb db [fido@localhost ~]$ ./substitute.sh ========= 치환을 시작합니다============ regexp: was replacement: db filename: sedtest.txt ================================== tomcat db jeus db jboss db wildfly db oracle db tibero db postgresql db cubrid db mysql db mssql db mariadb db ================================ if you wanna substitute more? y|n : n 쉘 스크립트를 종료합니다 |
|
기타 | |
쉘 스크립트가 종료되면 치환된 것들이 기존문자로 돌아오기 때문에 치환 된 것을 저장하는 version2 만들기 |
version1 | version2 | version3 | |
치환 | o | o | o |
다른 file 치환 | x | o | o |
“/”가 들어간 경로 치환 | x | x | o |
동일 file 치환 반복 | x | x | o |
파일경로 받아오기 | x | o | o |
파일명 받아오기 | o | o | o |
파일저장 | x | o | o |
반응형
'Linux > Shell script' 카테고리의 다른 글
CLI, shell script에서 mysql query 실행 (5.5/5.6/5.7 버전별 정리) (0) | 2021.10.22 |
---|---|
Centos7 mysql 5.7 install script (0) | 2021.10.21 |
sed 실전 응용 경로를 바꾸고 싶을 때, file로 저장방법까지 (0) | 2021.09.27 |
awk를 이용하여 조건에 맞는 값 출력하기 + | 이용하여 다중 명령 (0) | 2021.09.24 |
sed 사용법 및 예시 (0) | 2021.09.18 |
댓글