基本来自abs. 便于自己查阅.
字符串处理 bash
其实对于bash来说,最常用的变量基本就是字符串.即使是数字不也直接当作字符串操作.
字符串长度
${#string}
字符串中符合正则的子串长度
expr match "$string" '$substring'
expr "$string" : '$substring'
$ stringZ=abcABC123ABCabc
$ echo `expr match "$stringZ" 'abc[A-Z]*.2'` # 8
$ echo `expr "$stringZ" : 'abc[A-Z]*.2'` # 8
substring中字符在string中首次出现位置(Numerical position in $string of first character in $substring that matches.)
expr index $string $substring
$ stringZ=abcABC123ABCabc
$ echo `expr index "$stringZ" C12` # 6
$ echo `expr index "$stringZ" 1c` # 3
提取子串(数字定位)
${string:position}
${string:position:length}
expr substr $string $position $length
$ stringZ=abcABC123ABCabc
$ echo ${stringZ:0} # abcABC123ABCabc
$ echo ${stringZ:7} # 23ABCabc
$ echo ${stringZ:7:3} # 23A
$ echo `expr substr $stringZ 1 2` # ab
$ echo `expr substr $stringZ 4 3` # ABC
提取子串(正则)
提取从源串头开始提取子串
expr match "$string" '\($substring\)'
expr "$string" : '\($substring\)'
从源串头后部提取子串(.*)
expr match "$string" '.*\($substring\)'
expr "$string" : '.*\($substring\)'
$ echo `expr match "$stringZ" '\(.[b-c]*[A-Z]..[0-9]\)'` # abcABC1
$ echo `expr "$stringZ" : '\(.[b-c]*[A-Z]..[0-9]\)'` # abcABC1
$ echo `expr match "$stringZ" '.*\([A-C][A-C][A-C][a-c]*\)'` # ABCabc
删除子串 (难道是通配符!!!)
${string#substring} 删除从左开始最短匹配字符串
${string##substring} 删除从左开始最长匹配字符串
${string%substring} 删除从右开始最短匹配字符串
${string%%substring} 删除从右开始最长匹配字符串
例程:
SUFF=TXT
suff=txt
for i in $(ls *.$SUFF)
do mv -f $i ${i%.$SUFF}.$suff ; done
子串替换
${string/substring/replacement} 替换第一个匹配
${string//substring/replacement} 替换所有匹配
${string/#substring/replacement} 替换string头部匹配
${string/%substring/replacement} 替换string尾部匹配
$ match=abc
$ repl=000
$ echo ${stringZ/$match/$repl} # 000ABC123ABCabc
$ echo ${stringZ//$match/$repl} # 000ABC123ABC000
字符串处理 bash
其实对于bash来说,最常用的变量基本就是字符串.即使是数字不也直接当作字符串操作.
字符串长度
${#string}
字符串中符合正则的子串长度
expr match "$string" '$substring'
expr "$string" : '$substring'
$ stringZ=abcABC123ABCabc
$ echo `expr match "$stringZ" 'abc[A-Z]*.2'` # 8
$ echo `expr "$stringZ" : 'abc[A-Z]*.2'` # 8
substring中字符在string中首次出现位置(Numerical position in $string of first character in $substring that matches.)
expr index $string $substring
$ stringZ=abcABC123ABCabc
$ echo `expr index "$stringZ" C12` # 6
$ echo `expr index "$stringZ" 1c` # 3
提取子串(数字定位)
${string:position}
${string:position:length}
expr substr $string $position $length
$ stringZ=abcABC123ABCabc
$ echo ${stringZ:0} # abcABC123ABCabc
$ echo ${stringZ:7} # 23ABCabc
$ echo ${stringZ:7:3} # 23A
$ echo `expr substr $stringZ 1 2` # ab
$ echo `expr substr $stringZ 4 3` # ABC
提取子串(正则)
提取从源串头开始提取子串
expr match "$string" '\($substring\)'
expr "$string" : '\($substring\)'
从源串头后部提取子串(.*)
expr match "$string" '.*\($substring\)'
expr "$string" : '.*\($substring\)'
$ echo `expr match "$stringZ" '\(.[b-c]*[A-Z]..[0-9]\)'` # abcABC1
$ echo `expr "$stringZ" : '\(.[b-c]*[A-Z]..[0-9]\)'` # abcABC1
$ echo `expr match "$stringZ" '.*\([A-C][A-C][A-C][a-c]*\)'` # ABCabc
删除子串 (难道是通配符!!!)
${string#substring} 删除从左开始最短匹配字符串
${string##substring} 删除从左开始最长匹配字符串
${string%substring} 删除从右开始最短匹配字符串
${string%%substring} 删除从右开始最长匹配字符串
例程:
SUFF=TXT
suff=txt
for i in $(ls *.$SUFF)
do mv -f $i ${i%.$SUFF}.$suff ; done
子串替换
${string/substring/replacement} 替换第一个匹配
${string//substring/replacement} 替换所有匹配
${string/#substring/replacement} 替换string头部匹配
${string/%substring/replacement} 替换string尾部匹配
$ match=abc
$ repl=000
$ echo ${stringZ/$match/$repl} # 000ABC123ABCabc
$ echo ${stringZ//$match/$repl} # 000ABC123ABC000