[BASH] String manipulation

CS/Shell/Perl/Python 2011. 3. 14. 13:42
참고


1. String Length

${#string}



2. Substring Extraction

${string:position}
$string에서 position에 있는 substring
만약 $string 파라메터가 "*"나 "@"이면 position에서 시작하는 위치 매개변수를 추출해 낸다.
${string:position:length}
$string에서 position부터 length까지의 substring

stringZ=abcABC123ABCabc
#           0123456789.....
#           0-based indexing.

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

echo ${stringZ:7:3}                         # 23A



3. Substring Removal

${string#substring}
$string의 앞 부분에서 가장 짧게 일치하는 $substring을 삭제
${string##substring}
$string의 앞 부분에서 가장 길게 일치하는 $substring을 삭제

stringZ=abcABC123ABCabc
#           |------|                shortest
#           |----------------|    longest

echo ${stringZ#a*C}       # 123ABCabc
echo ${stringZ##a*C}     # abc

${string%substring}
$string의 뒷 부분에서 가장 짧게 일치하는 $substring을 삭제
${string%%substring}
$string의 뒷 부분에서 가장 길게 일치하는 $substring을 삭제

stringZ=abcABC123ABCabc
#                                    ||    shortest
#              |------------------|    longest

echo ${stringZ#b*c}       # abcABC123ABCa
echo ${stringZ##b*c}     # a



4. Substring Replacement

${string/substring/replacement}
처음 일치하는 $substring을 $replacement로 대치. $string 자체가 변화되지는 않는다.
${string//substring/replacement}
일치하는 모든 $substring을 $replacement로 대치. $string 자체가 변화되지는 않는다.

stringZ=abcABC123ABCabc
echo ${stringZ/abc/xyz}       # xyzABC123ABCabc
                                            # Replaces first match of 'abc' with 'xyz'.

echo ${stringZ//abc/xyz}      # xyzABC123ABCxyz
                                            # Replaces all matches of 'abc' with # 'xyz'.

# Can the match and replacement strings be parameterized?
match=abc
repl=000
echo ${stringZ/$match/$repl}  # 000ABC123ABCabc
#                     ^           ^            ^^^
echo ${stringZ//$match/$repl} # 000ABC123ABC000
#                      ^          ^            ^^^               ^^^

# What happens if no $replacement string is supplied?
echo ${stringZ/abc}           # ABC123ABCabc
echo ${stringZ//abc}          # ABC123ABC

${string/#substring/replacement}
$substring이 $string의 맨 앞에서 일치하면 $replacement로 대치.
${string/%substring/replacement}
$substring이 $string의 맨 뒤에서 일치하면 $replacement로 대치.

stringZ=abcABC123ABCabc

echo ${stringZ/#abc/XYZ}          # XYZABC123ABCabc
                                                  # Replaces front-end match of 'abc' with 'XYZ'.

echo ${stringZ/%abc/XYZ}          # abcABC123ABCXYZ
                                                   # Replaces back-end match of 'abc' with 'XYZ'.

: