[Shell Script] 정해진 자릿수 숫자에 하이픈 넣기

정해진 자릿수 숫자에 하이픈 넣기 




우편번호나 전화번호 같은 텍스트에서 정해진 자리에 하이픈을 넣거나 삭제하는 스크립트 입니다 . 


스크립트
#!/bin/sh

d_flag=0                    #1

while getopts "d" option    #2

do
    case $option in
        d)
         d_flag=1
         ;;
        \?)
         exit 1
         ;;
    esac
done

shift $(expr $OPTIND - 1)   #3
filename="$1"

if [ ! -f "$filename" ]; then
    echo "대상 파일이 존재하지 않습니다."
    exit 1
fi                          #4

if [ "$d_flag" -eq 1 ]; then #5
    awk '{print $1}' "$filename" | grep '^[0-9]\{3\}-[0-9]\{4\}$' | sed "s/-//" #6
else
    awk '{print $1}' "$filename" | grep '^[0-9]\{7\}$' | sed "s/\(...\)/\1-/"    #7
fi



결과 


















  • 이 스크립트는 7자리 숫자가 적힌 파일에서 3번째와 4번째 숫자 사이에 하이픈을 넣거나, 하이픈이 있는 7자리 숫자에서 하이픈을 삭제하여 표시합니다 .

  • 스크립트 옵션으로 -d를 지정하면 하이픈을 삭제하고 아니면 추가합니다. 

  • 우편번호를 비롯한 숫자텍스트에 응용할 수 있습니다 .



#1 : 옵션 지정 플래그 변수 d_flag를 정의합니다. -d옵션이 지정되었는지 판별하는 변수 입니다 . 

d_flag=0                    #1



#2 : getopts 명령어를 사용해서 실행할 때 -d  옵션이 지정되었는지 판별해서 지정했다면 1을 셸변수 d_flag에 대입합니다 . 

while getopts "d" option    #2

do
    case $option in
        d)
         d_flag=1
         ;;
        \?)
         exit 1
         ;;
    esac
done

#3 :우선 위치 파라미터에서 명령행 인수로 지정한 옵션을 shift 명령어로 당깁니다 . 

이러면 위치 파라미터 $1에 명령행 인수로 지정한 파일명이 저장되므로 $1을 셸 변수 filename에 대입합니다 . 

shift $(expr $OPTIND - 1)   #3
filename="$1"



#4 : 지정한 우편 번호 파일이 존재하는지 확인합니다 . 

if [ ! -f "$filename" ]; then
    echo "대상 파일이 존재하지 않습니다."
    exit 1
fi                          #4


#5 : 하이픈을 삭제할지 추가할지 if문으로 판단 후 분기합니다 . 

#6 : 하이픈 삭제 

#7 : 하이픈 추가 


if [ "$d_flag" -eq 1 ]; then #5
    awk '{print $1}' "$filename" | grep '^[0-9]\{3\}-[0-9]\{4\}$' | sed "s/-//" #6
else
    awk '{print $1}' "$filename" | grep '^[0-9]\{7\}$' | sed "s/\(...\)/\1-/"    #7
fi




댓글