컴퓨터활용/유닉스

쉘에서 문자열 조작하기

멜번초이 2008. 2. 28. 17:17
반응형
 ★  간단한 쉘 작성...  띄워 쓰기 주의... 쩝 ★
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash    # 배쉬 쉘
# Description : Modify config file because line is changed
 
# 입력 파라미터 갯수 체크 (1개만 가능)
if [ $# -gt 1 ]
then
    echo "   *** Error> Wrong argument number"
    exit 1
fi
 
# 입력 파라미터 유효성 체크 ( 1 ~ 24 까지만 )
if [ $1 -lt 0 -o $1 -gt 24 ]
then
    echo "   *** Error> Wrong argument (input between 1 and 24)"
    exit 1
fi
 
# 입력 파라미터의 길이가 1이라면(10보다 작으면) 파라미터에 "0"을 붙여줌
if [ ${#1} -eq 1 ]
then
    temp="${1/?/0$1}"     # 첫번째(1) 입력파라미터 한자리(?)에 대한값을 "0" + $1로 변경
else
    temp="$1"
fi
 
# cd2k_iplu.cfg 파일 내용중 "LINE(2자리)_" 의 값을 "LINE($temp)_"으로 치환
sed "s/LINE.._/LINE"$temp"_/g" FileName.txt > tmp
mv tmp FileName.txt
cs


--- 문자열 조작법 (출처 : KLDP) ---


1. 문자열 길이

   ${#string}
   expr length $string
   expr "$string" : '.*'

   stringZ=abcABC123ABCabc

 

   echo ${#stringZ}                        # 15

   echo `expr length $stringZ`          # 15

   echo `expr "$stringZ" : '.*'`          # 15 



2. 문자열조각 추출(Substring Extraction)

${string:position}

$string$position 부터의 문자열조각을 추출.

string 매개변수가 "*" 이거나 "@" 라면 position에서 시작하는 위치 매개변수 [1] 를 추출해 냅니다.

${string:position:length}

$string$position부터 $length만큼의 문자를 추출해 냅니다.

stringZ=abcABC123ABCabc
#          0123 45 6789.....
#          0 부터 시작하는 인덱싱.
echo ${stringZ:0}           # abcABC123ABCabc
echo ${stringZ:1}           # bcABC123ABCabc
echo ${stringZ:7}           # 23ABCabc
echo ${stringZ:7:3}        # 23A
                                    # 3글자짜리 문자열조각.
 
3. 문자열 조각 대치(Substring Replacement)
${string/substring/replacement}

처음 일치하는 $substring$replacement로 대치.

${string//substring/replacement}

일치하는 모든 $substring$replacement로 대치.

${string/substring/replacement}
          처음 일치하는 $substring$replacement로 대치.
${string//substring/replacement}
          일치하는 모든 $substring$replacement로 대치.

 

stringZ=abcABC123ABCabc

echo ${stringZ/abc/xyz}       # xyzABC123ABCabc
                                           # 처음 일치하는 'abc'를 'xyz'로 대치.
echo ${stringZ//abc/xyz}      # xyzABC123ABCxyz
                                           # 일치하는 모든 'abc'를 'xyz'로 대치


echo ${stringZ/#abc/XYZ}    # XYZABC123ABCabc
                                           # 맨 앞에서 일치하는 'abc'를 'xyz'로 대치.
echo ${stringZ/%abc/XYZ}    # abcABC123ABCXYZ
                                            # 맨 뒤에서 일치하는 'abc'를 'xyz'로 대치. 

 

4. 문자열조각 삭제(Substring Removal)

${string#substring}

$string앞 부분에서부터 가장 짧게 일치하는 $substring을 삭제.

${string##substring}

$string앞 부분에서부터 가장 길게 일치하는 $substring을 삭제

stringZ=abcABC123ABCabc
#          |-----|
#          |------------|
echo ${stringZ#a*C}    # 123ABCabc
# 'a'와 'C' 사이에서 가장 짧게 일치되는 부분을 삭제.
echo ${stringZ##a*C} # abc
# 'a'와 'C' 사이에서 가장 길게 일치되는 부분을 삭제.
stringZ=abcABC123ABCabc
#                                  ||
#            |---------------|
echo ${stringZ%b*c}             # abcABC123ABCa
# $stringZ의 뒷 부분부터 계산해서 'b'와 'c' 사이에서 가장 짧게 일치하는 부분을 삭제.
echo ${stringZ%%b*c}           # a
# $stringZ의 뒷 부분부터 계산해서 'b'와 'c' 사이에서 가장 길게 일치하는 부분을 삭제.


반응형

'컴퓨터활용 > 유닉스' 카테고리의 다른 글

truss를 이용한 input/output 내역 모니터링  (0) 2008.05.13
find 명령어 옵션  (2) 2008.05.12
VI 에디터 120% 사용하기  (0) 2007.12.18
awk를 이용한 substr  (0) 2007.03.11
.vimrc  (0) 2007.03.07