shell变量

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
原文地址:https://www.cnblogs.com/igoodful/p/13632715.html