Shell 字符串操作
1.获取字符串长度
str="abcd" expr length $str # 4 echo ${#str} # 4 expr "$str" : ".*" # 4
2.截取截取子串
str="abbc_def_def_.ghi_abcjkl.zip" echo ${str#a*c} # 输出 _def_def_.ghi_abcjkl.zip 一个井号(#) 表示从左边截取掉最短的匹配 (这里把abbc字串去掉) echo ${str##a*c} # 输出 jkl.zip, 两个井号(##) 表示从左边截取掉最长的匹配 (这里把abbc,def,ghi,abc字串去掉) echo ${str#"a*c"} # 输出 abbc_def_def_.ghi_abcjkl.zip 因为str中没有"a*c"子串 echo ${str##"a*c"} # 输出 abbc_def_def_.ghi_abcjkl.zip echo ${str#*a*c*} # 输出 _def_def_.ghi_abcjkl.zip echo ${str##*a*c*} # 空 echo ${str#d*f)} # 输出 abbc_def_def_.ghi_abcjkl.zip echo ${str#*d*f} # 输出 _def_.ghi_abcjkl.zip echo ${str##*d*f} # 输出 _.ghi_abcjkl.zip echo ${str:0:4} # 输出 abbc 从下标是0的字符串开始的4个字符 echo ${str%.*p} # 输出 abbc_def_def_.ghi_abcjkl 一个百分号(%)表示从右边截取最短的匹配 echo ${str%%.*p} # 输出 abbc_def_def_ 两个百分号表示(%%)表示从右边截取最长的匹配 echo ${str%%.*l*} # 输出 abbc_def_def_ 可以这样记忆, 井号(#)通常用于表示一个数字,它是放在前面的;百分号(%)卸载数字的后面; 或者这样记忆,在键盘布局中,井号(#)总是位于百分号(%)的左边(即前面)
3.字符串替换
str="apple, tree, apple tree" echo ${str/apple/APPLE} # 替换第一次出现的apple echo ${str//apple/APPLE} # 替换所有apple echo ${str/#apple/APPLE} # 如果字符串str以apple开头,则用APPLE替换它 echo ${str/%apple/APPLE} # 如果字符串str以apple结尾,则用APPLE替换它