정규식을 활용한 Underscore / Camel Case 전환 : INSERT 쿼리 생성

2023. 8. 11. 01:19리눅스 실제 사용 팁/bash

camel_to_snake_INSERT.sh
0.00MB

필요해서 퇴근 후에 만들었는데 현실에서 막상 사용하려고 하니 인터넷이 안되는 환경이었다.

#!/bin/bash

# 활용법 : 
1번 인자 : 테이블명
2번 인자 : ("_"로 구분된) 컬럼명이 들어 있는 파일
function usage {
	prog_nm=$(basename $0)
	echo 'usage :'
	echo -e '\t'${prog_nm} 'table-name' 'camel-case-file'
	echo or
    
    # 테이블명을 지정하지 않으면 컬럼명만 처리함
	echo -e '\t'${prog_nm} 'camel-case-file'
}

[[ $# -lt 1 ]] && usage && exit 0



function genSQL {
	[[ ! -f $FILE ]] && usage && exit 1

	if [ ! -z $TB_NAME ];then
		echo -e 'INSERT INTO' $TB_NAME
		echo -e '('
	fi

	let "cnt=1"
	for src in $(cat $FILE);do
		LINE=$(echo ${src} | sed -E 's/\B([[:upper:]])/_\1/g' | sed -E 's/([a-zA-Z].*)/\U\1/g')

		if [ $cnt -eq 1 ];then
			echo '  '$LINE
		else
			echo , $LINE
		fi
		let cnt++;
	done

	if [ ! -z $TB_NAME ];then
		echo -e ') VALUES ('
	fi

	let "cnt=1"
	for src in $(cat $FILE);do
		if [ $cnt -eq 1 ];then
			echo '  ${#'${src}'}'
		else
			echo , '${#'${src}'}'
		fi
		let cnt++;
	done

	if [ ! -z $TB_NAME ];then
		echo -e ')'
	fi
}

if [ $# -eq 1 -a -f $1 ];then
	FILE=$1
	genSQL
else
	TB_NAME=$1
	FILE=$2
	genSQL
fi

 

테스트 방법 :

./camel_to_snake_INSERT.sh AAA src.txt

 

컬럼파일 :

"src.txt" 내용

EmployeeId
LastName
FirstName
Title
ReportsTo
BirthDate
HireDate
Address
City
State
Country
PostalCode
Phone
Fax
Email

 

실행 결과 :

INSERT INTO AAA
(
  EMPLOYEE_ID
, LAST_NAME
, FIRST_NAME
, TITLE
, REPORTS_TO
, BIRTH_DATE
, HIRE_DATE
, ADDRESS
, CITY
, STATE
, COUNTRY
, POSTAL_CODE
, PHONE
, FAX
, EMAIL
) VALUES (
  ${#EmployeeId}
, ${#LastName}
, ${#FirstName}
, ${#Title}
, ${#ReportsTo}
, ${#BirthDate}
, ${#HireDate}
, ${#Address}
, ${#City}
, ${#State}
, ${#Country}
, ${#PostalCode}
, ${#Phone}
, ${#Fax}
, ${#Email}
)

 

먼저 작성했던 글 :

 

정규식을 활용한 Underscore / Camel Case 전환

1. Underscore to Camel Case 찾을 내용 : _(.) 바꿀 내용 : \U$1 노트패드++ 에서 통하는 방법이다. 다만, 저 방법을 적용하기 전에 우선 모두 소문자로 변환해야 한다. 그렇게 하지 않으면 요렇게 되지~~ (적

debianizer.tistory.com