9.2. ¹®ÀÚ¿­ Á¶ÀÛ

Bash ´Â ³î¶øµµ·Ï ¸¹Àº ¹®ÀÚ¿­ Á¶ÀÛ ¿¬»êÀ» Á¦°øÇÕ´Ï´Ù. ÇÏÁö¸¸ ºÒÇàÇÏ°Ôµµ ÀÌ µµ±¸µéÀº Çϳª·Î ÅëÇյǾî ÀÖÁö ¾Ê½À´Ï´Ù. ¸î °³´Â ¸Å°³º¯¼ö ġȯÀÇ ¼­ºê¼ÂÀÌ°í ´Ù¸¥ °ÍÀº À¯´Ð½ºÀÇ expr ¸í·É¾îÀÇ ±â´É¿¡ ÇØ´çÇÕ´Ï´Ù. ÀÌ·¸±â ¶§¹®¿¡ ÀÌ·± È¥µ¿½º·¯¿ò¿¡ ´ëÇÑ ¾ð±Þµµ ¾øÀÌ ¸í·É¾î ¹®¹ý¿¡ ÀÏ°ü¼ºÀÌ ¾ø°í ±â´ÉÀÌ Áߺ¹µÇ¾î ÀÖ½À´Ï´Ù.

¹®ÀÚ¿­ ±æÀÌ

${#string}

expr length $string

expr "$string" : '.*'

stringZ=abcABC123ABCabc

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

¹®ÀÚ¿­ ½ÃÀÛ¿¡¼­ºÎÅÍ ¸ÅĪµÇ´Â ¹®ÀÚ¿­Á¶°¢(substring)ÀÇ ±æÀÌ

expr match "$string" '$substring'

$substring Àº Á¤±Ô Ç¥Çö½ÄÀÔ´Ï´Ù.

expr "$string" : '$substring'

$substring Àº Á¤±Ô Ç¥Çö½ÄÀÔ´Ï´Ù.

stringZ=abcABC123ABCabc
#       |------|

echo `expr match "$stringZ" 'abc[A-Z]*.2'`   # 8
echo `expr "$stringZ" : 'abc[A-Z]*.2'`       # 8

À妽º

expr index $string $substring

$string ¿¡¼­ ÀÏÄ¡ÇÏ´Â $substring ÀÇ Ã¹ ¹®ÀÚÀÇ À§Ä¡.

stringZ=abcABC123ABCabc
echo `expr index "$stringZ" C12`             # 6
                                             # C ÀÇ À§Ä¡.

echo `expr index "$stringZ" 1c`              # 3
# 'c' (3¹ø° À§Ä¡¿¡ ÀÖ´Â) °¡ '1' º¸´Ù ¸ÕÀú ÀÏÄ¡µÊ.

C ÀÇ strchr()¿Í °ÅÀÇ ºñ½ÁÇÕ´Ï´Ù.

¹®ÀÚ¿­Á¶°¢ ÃßÃâ(Substring Extraction)

${string:position}

$string ÀÇ $position ºÎÅÍÀÇ ¹®ÀÚ¿­Á¶°¢À» ÃßÃâ.

string ¸Å°³º¯¼ö°¡ "*" À̰ųª "@" ¶ó¸é position¿¡¼­ ½ÃÀÛÇÏ´Â À§Ä¡ ¸Å°³º¯¼ö [1] ¸¦ ÃßÃâÇØ ³À´Ï´Ù.

${string:position:length}

$stringÀÇ $positionºÎÅÍ $length¸¸Å­ÀÇ ¹®ÀÚ¸¦ ÃßÃâÇØ ³À´Ï´Ù.

stringZ=abcABC123ABCabc
#       0123456789.....
#       0 ºÎÅÍ ½ÃÀÛÇÏ´Â À妽Ì.

echo ${stringZ:0}                            # abcABC123ABCabc
echo ${stringZ:1}                            # bcABC123ABCabc
echo ${stringZ:7}                            # 23ABCabc

echo ${stringZ:7:3}                          # 23A
                                             # 3±ÛÀÚÂ¥¸® ¹®ÀÚ¿­Á¶°¢.

string ¸Å°³º¯¼ö°¡ "*" ³ª "@" ¶ó¸é À§Ä¡ position¿¡¼­ ½ÃÀÛÇÏ´Â ¸Å°³º¯¼öÀÇ ÃÖ´ë length¸¦ ÃßÃâÇØ ³À´Ï´Ù.

echo ${*:2}          # µÎ¹ø° ÀÌÈÄÀÇ À§Ä¡ ¸Å°³º¯¼ö¸¦ ¿¡ÄÚ.
echo ${@:2}          # À§¿Í °°À½.

echo ${*:2:3}        # 2,3,4¹ø(3°³) À§Ä¡ ¸Å°³º¯¼ö¸¦ ¿¡ÄÚ.

expr substr $string $position $length

$stringÀÇ $positionºÎÅÍ $length¸¸Å­ÀÇ ¹®ÀÚ¸¦ ÃßÃâÇØ ³À´Ï´Ù.

stringZ=abcABC123ABCabc
#       123456789......
#       1 ºÎÅÍ ½ÃÀÛÇÏ´Â À妽Ì.

echo `expr substr $stringZ 1 2`              # ab
echo `expr substr $stringZ 4 3`              # ABC

expr match "$string" '\($substring\)'

$stringÀÇ Ã³À½¿¡¼­ºÎÅÍ Á¤±Ô Ç¥Çö½ÄÀÎ $substringÀ» ÃßÃâÇØ ³À´Ï´Ù.

expr "$string" : '\($substring\)'

$stringÀÇ Ã³À½¿¡¼­ºÎÅÍ Á¤±Ô Ç¥Çö½ÄÀÎ $substringÀ» ÃßÃâÇØ ³À´Ï´Ù.

stringZ=abcABC123ABCabc

echo `expr match "$stringZ" '\(.[b-c]*[A-Z]..[0-9]\)'`   # abcABC1
echo `expr "$stringZ" : '\(.[b-c]*[A-Z]..[0-9]\)'`       # abcABC1
# À§ÀÇ µÎ °¡Áö ÇüÅ´ µ¿ÀÏÇÕ´Ï´Ù.

¹®ÀÚ¿­Á¶°¢ »èÁ¦(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' »çÀÌ¿¡¼­ °¡Àå ±æ°Ô ÀÏÄ¡µÇ´Â ºÎºÐÀ» »èÁ¦.

${string%substring}

$stringÀÇ µÞ ºÎºÐ¿¡¼­ºÎÅÍ °¡Àå ª°Ô ÀÏÄ¡ÇÏ´Â $substringÀ» »èÁ¦.

${string%%substring}

$stringÀÇ µÞ ºÎºÐ¿¡¼­ºÎÅÍ °¡Àå ±æ°Ô ÀÏÄ¡ÇÏ´Â $substringÀ» »èÁ¦.

stringZ=abcABC123ABCabc
#                    ||
#        |------------|

echo ${stringZ%b*c}      # abcABC123ABCa
# $stringZÀÇ µÞ ºÎºÐºÎÅÍ °è»êÇؼ­ 'b'¿Í 'c' »çÀÌ¿¡¼­ °¡Àå ª°Ô ÀÏÄ¡ÇÏ´Â ºÎºÐÀ» »èÁ¦.

echo ${stringZ%%b*c}     # a
# $stringZÀÇ µÞ ºÎºÐºÎÅÍ °è»êÇؼ­ 'b'¿Í 'c' »çÀÌ¿¡¼­ °¡Àå ±æ°Ô ÀÏÄ¡ÇÏ´Â ºÎºÐÀ» »èÁ¦.

¿¹ 9-9. ±×·¡ÇÈ ÆÄÀÏÀ» ´Ù¸¥ Æ÷¸Ë È®ÀåÀÚ·Î À̸§À» ¹Ù²Ù¸é¼­ º¯È¯

#!/bin/bash
#  cvt.sh:
#  ƯÁ¤ µð·ºÅ丮ÀÇ ¸ðµç MacPaint À̹ÌÁö ÆÄÀÏÀ» "pbm" Æ÷¸ËÀ¸·Î º¯È¯.

#  Brian Henderson(bryanh@giraffe-data.com)ÀÌ °ü¸®ÇÏ°í ÀÖ´Â "netpbm" ÆÐÅ°ÁöÀÇ
#+ "macptopbm" À» »ç¿ëÇÔ.
#  Netpbm Àº °ÅÀÇ ´ëºÎºÐÀÇ ¸®´ª½º ¹èÆ÷ÆÇ¿¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.

OPERATION=macptopbm
SUFFIX=pbm          # »õ ÆÄÀÏÀ̸§ È®ÀåÀÚ. 

if [ -n "$1" ]
then
  directory=$1      # µð·ºÅ丮 À̸§ÀÌ ÀÎÀÚ·Î ÁÖ¾îÁú °æ¿ì...
else
  directory=$PWD    # ¾Æ´Ï¸é ÇöÀç µð·ºÅ丮¿¡ ´ëÇؼ­.
fi  
  
# ´ë»ó µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏÀ» ".mac" È®ÀåÀÚÀÇ MacPaint À̹ÌÁö ÆÄÀÏÀ̶ó°í °¡Á¤.

for file in $directory/*    # ÆÄÀÏÀ̸§ globbing.
do
  filename=${file%.*c}      #  ÆÄÀÏÀ̸§¿¡¼­ ".mac" È®ÀåÀÚ¸¦ ¶¼¾î³¿
                            #+ ('.*c' ´Â '.' °ú 'c'¸¦ Æ÷ÇÔÇؼ­ µÑ »çÀÌÀÇ 
                            #+ ¸ðµç °Í°ú ÀÏÄ¡ÇÔ).
  $OPERATION $file > $filename.$SUFFIX
                            # º¯È¯µÈ ÆÄÀÏÀ» »õ ÆÄÀÏÀ̸§À¸·Î ÀçÁöÇâ.
  rm -f $file               # º¯È¯ÈÄ ¿ø·¡ ÆÄÀÏ »èÁ¦.
  echo "$filename.$SUFFIX"  # °á°ú¸¦ Ç¥ÁØÃâ·ÂÀ¸·Î ·Î±ë.
done

exit 0

¹®ÀÚ¿­ Á¶°¢ ´ëÄ¡(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'·Î ´ëÄ¡.

${string/#substring/replacement}

$substringÀÌ $stringÀÇ ¸Ç ¾Õ¿¡¼­ ÀÏÄ¡Çϸé $replacement·Î ´ëÄ¡.

${string/%substring/replacement}

$substringÀÌ $stringÀÇ ¸Ç µÚ¿¡¼­ ÀÏÄ¡Çϸé $replacement·Î ´ëÄ¡.

stringZ=abcABC123ABCabc

echo ${stringZ/#abc/XYZ}          # XYZABC123ABCabc
                                  # ¸Ç ¾Õ¿¡¼­ ÀÏÄ¡ÇÏ´Â 'abc'¸¦ 'xyz'·Î ´ëÄ¡.

echo ${stringZ/%abc/XYZ}          # abcABC123ABCXYZ
                                  # ¸Ç µÚ¿¡¼­ ÀÏÄ¡ÇÏ´Â 'abc'¸¦ 'xyz'·Î ´ëÄ¡.

½ºÅ©¸³Æ®¿¡¼­ ¹®ÀÚ¿­ Á¶ÀÛ¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ »çÇ×Àº 9.3Àý¿Í expr ¸í·É¾î¿¡¼­ ¹®ÀÚ¿­ Á¶ÀÛ°ú °ü·ÃµÈ ºÎºÐÀ» Âü°íÇϼ¼¿ä. ½ºÅ©¸³Æ® ¿¹Á¦´Â ´ÙÀ½À» Âü°íÇϼ¼¿ä.

  1. ¿¹ 12-6

  2. ¿¹ 9-11

  3. ¿¹ 9-12

  4. ¿¹ 9-13

  5. ¿¹ 9-15

ÁÖ¼®

[1]

ÀÌ ±ÔÄ¢Àº ¸í·É¾îÁÙ ÀÎÀÚ³ª ÇÔ¼ö·Î ³Ñ°ÜÁö´Â ¸Å°³º¯¼ö¿¡µµ Àû¿ëµË´Ï´Ù.