1、$[变量#匹配规则] (懒惰模式最短匹配) #从头开始匹配,最短删除
[root@liudongyi ~]# var1="l love you,but you love he"
[root@liudongyi ~]# var2=${var1#*ve}
[root@liudongyi ~]# echo $var2
you,but you love he
2、$[变量##匹配规则] (贪婪模式最长匹配) #从头开始匹配,最长删除
[root@liudongyi ~]# var1="l love you,but you love he"
[root@liudongyi ~]# var3=${var1##*ve}
[root@liudongyi ~]# echo $var3
3、$[变量%匹配规则] *代表任意多个字符 #从尾开始匹配,最短删除
[root@liudongyi ~]# var1="l love you,but you love he"
[root@liudongyi ~]# var4=${var1%ov*}
[root@liudongyi ~]# echo $var4
l love you,but you l
4、$[变量%%匹配规则] #从尾开始匹配,最长删除
[root@liudongyi ~]# var1="l love you,but you love he"
[root@liudongyi ~]# var5=${var1%%ov*}
[root@liudongyi ~]# echo $var5
l l
5、$[变量/旧字符串/新字符串] #替换变量内的旧字符串为新字符串,只替换
如果我要把var1中的love替换成like
[root@liudongyi ~]# var1="l love you,but you love he"
[root@liudongyi ~]# var6=${var1/love/like}
[root@liudongyi ~]# echo $var6
l like you,but you love he
[root@liudongyi ~]#
我们发现只替换了第一个匹配到的love,后面你的love没有被替换
6、$[变量//旧字符串/新字符串] #替换变量内的旧字符串为新字符串,替换全部
我们把var1中的字符全部替换成like
[root@liudongyi ~]# var7=${var1//love/like}
[root@liudongyi ~]# echo $var7
l like you,but you like he
[root@liudongyi ~]#
计算机字符串的长度
方法1:${#string}
[root@liudongyi ~]# var1="Hello World"
[root@liudongyi ~]# len=${#var1}
[root@liudongyi ~]# echo $len
方法:2:expr length $string
[root@liudongyi ~]# len1=`expr length "$var1"`
[root@liudongyi ~]# echo $len1
获取字符索引位置
方法:expr index "$string" substr
查找start在字符串中的位置(其实寻找字符start中任意一个字符在完整字符串中的位置,那个最快匹配返回那个值)
[root@liudongyi ~]# var1="quickstart is a app"
[root@liudongyi ~]# inde=`expr index "$var1" start`
[root@liudongyi ~]# echo $inde
比如uniq中的字符q是var1中的第一个字符,所以返回值为1
[root@liudongyi ~]# var1="quickstart is a app"
[root@liudongyi ~]# inde=`expr index "$var1" uniq`
[root@liudongyi ~]# echo $inde
1
在var1中的cnk中的字符c字符最先匹配,所以返回值为4
[root@liudongyi ~]# var1="quickstart is a app"
[root@liudongyi ~]# inde=`expr index "$var1" cnk`
[root@liudongyi ~]# echo $inde
抽取字符串中的子串
方法1:
1)${string:position}指定开始提取的位置
意味着var的字符串,我是从第10个字符开始提取后面的字符
[root@liudongyi ~]# var1="kafka hadoop yarn mapreduce"
[root@liudongyi ~]# substr=${var1:10}
[root@liudongyi ~]# echo $substr
2) ${string:position:length}
从var1指定位置10开始匹配5个字符,包括空格符
[root@liudongyi ~]# var1="kafka hadoop yarn mapreduce"
[root@liudongyi ~]# substr1=${var1:10:5}
[root@liudongyi ~]# echo $substr1
3) ${string: -position} 或者 ${string :(position)}
截取后三个字符的字符串:
[root@liudongyi ~]# var1="kafka hadoop yarn mapreduce"
[root@liudongyi ~]# substr1=${var1: -3}
[root@liudongyi ~]# echo $substr1
截取var1字符串从第七个字符开始的字符子串
[root@liudongyi ~]# var1="kafka hadoop yarn mapreduce"
[root@liudongyi ~]# substr1=${var1: (7)}
[root@liudongyi ~]# echo $substr1
方法2:
expr substr $string $position $length
从var1中的字符串第五个位置截取10个长度的子串
[root@liudongyi ~]# var1="kafka hadoop yarn mapreduce"
[root@liudongyi ~]# substr=`expr substr "$var1" 5 10`
[root@liudongyi ~]#
[root@liudongyi ~]# echo $substr
a hadoop y
注意:使用expr,索引计数是从1开始计算:使用${string:position},索引计数从0开始
编写一个小脚本:
用户输入1|2|3|4,可以执行对应项的功能:输入Q|q则退出
(1)、打印string长度
(2)、删除字符串中所有的Hadoop
(3)、替换第一个Hadoop为Mapreduce
(4)、替换全部Hadoop为Mapreduce
#!/bin/bash # string="Bigdata process framework is Hadoop,Hadoop is an open source project" function print_tips { echo "*************************" echo "(1)打印string长度" echo "(2)删除字符串中所有的Hadoop" echo "(3)替换第一个Hadoop为Mapreduce" echo "(4)替换全部Hadoop为Mapreduce" } function len_of_string { echo "${#string}" } function del_hadoop { echo "${string//Hadoop/}" } function rep_hadoop_mapreduce_first { echo "${string/Hadoop/Mapreduce}" } function rep_hadoop_mapreduce_all { echo "${string//Hadoop/Mapreduce}" } while true do echo " [string=$string] " echo print_tips read -p "please input your choice(1|2|3|4|q|Q):" choice case $choice in 1) len_of_string ;; 2) del_hadoop ;; 3) rep_hadoop_mapreduce_first ;; 4) rep_hadoop_mapreduce_all ;; q|Q) exit ;; *) echo "Error,input only in{1|2|3|4|q|Q}" ;; esac done
至此,如果对Shell有兴趣请看下一篇博客