<span>shell变量</span>
01、字符串替换"/" 和"//"
单个"/"只会替换首个匹配到的字符串:{var/old/new} 如果需要替换所有匹配到的字符,应该通过${var//old/new} [root@ ~]# net='www.baidu.com.www.com' You have new mail in /var/spool/mail/root [root@ ~]# echo $net www.baidu.com.www.com [root@~]# echo ${net/ww/tt} ttw.baidu.com.www.com [root@ ~]# echo ${net//ww/tt} ttw.baidu.com.ttw.com
除此之外,还有两种专门针对字符串开头和结尾的替换方式
只替换开头匹配的字符串${var/#pattern/sub}
只替换结尾匹配的字符串${var/%pattern/sub}
02、删除字符串
删除字符串
其实学会了替换字符串删除字符串就更简单了,只需将替换部分写成空即可,即${variable/pattern/null},例如将net的第一个.删除,只需 [Neptuneyt]$ echo ${net/./} wwwbaidu.com [Neptuneyt]$ echo ${net/.} #最后一个/可以不用写 wwwbaidu.com
若要删除所有匹配到的只需即${variable//pattern},例如将net的.都删除,只需 [Neptuneyt]$ echo ${net//.} wwwbaiducom
同理,只删除开头或者结尾匹配到的字符也是类似操作,这里就不赘述了。
03、字符串长度
想要知道"www.baidu.com"的变量net的长度十分简单,通过${#net}即可获取。 [root@ ~]# net=`netstat -ntpl|grep mysqld|grep LISTEN|awk '{print $4}' |grep ":${my_port}$"` You have mail in /var/spool/mail/root [root@ ~]# echo $net :::3308 [root@ ~]# echo ${#net} 7 [root@ ~]#
04、字符串截取
$ net="www.baidu.com" $ # 从第4个字符截取到baidu $ echo ${net:4:5} #从第4个字符.开始截取5个字符 baidu $ # 截取baidu.com $ echo ${net:4} #起始位置后不接截取字符长度则默认截取之后所有的 baidu.com $ # 用倒数截取com $ echo ${net:0-3} #从倒数第三个字符截取到末尾 com