一: 求字符串长度
格式如下:
1. ${#string}
2. expr length $string
二: 字符串索引
格式如下
expr index $string $substring
注:expr索引命令的功能是在字符串$string上匹配$substring中字符第一次出现的位置,若在$string上匹配不到$substring中的任何字符,expr index返回0
三: expr match
在开头匹配字符串,格式如下
expr match $string $substring
注:expr match命令在string的开头匹配substring字符串,返回匹配到的substring字符串的长度,若string的开头匹配不到substring,则返回0,,substring既可以是字符串也可以是正则表达式
四: 抽取子串
bash shell 提供两种命令${...}和expr实现抽取子串功能,${..}有两种格式,格式如下
1. ${string:position}
2 .${string:position:length}
注:第1种格式命令从名称为$string的字符串的第$position个位置开始抽取子串,第2种格式命令在第1种格式命令的基础上添加了$length变量,表示从名称为$string的字符串的第$position个位置开始抽取长度为$length的子串,需要注意的是,${...}格式的命令是从0开始对名称为$string的字符串进行标号
1. ${string: -length} //冒号和横杆符号之间有一个空格
2. ${string:(length)} //冒号和左括号之间未必要有空格,length要以-号开头
注: 从$string的右边抽取长度为$length的的子串
expr 抽取子串命令格式如下
expr substr $string $position $length
注: expr substr命令与${...}命令最大的不同之处在于expr substr命令是从1开始对名称为$string的字符串进行编号的,另外,expr substr命令中的$length是必不可少的,如果缺少$length参数,将报expr语法错误
接下来我们介绍使用正则表达式抽取子串命令,是用正则表达式只能抽取string开头处或结尾处的子串,抽取string开头处子串的命令格式有以下两种格式
利用正则表达式,抽取string结尾处子串的命令同样有以下两种格式
五: 删除子串
与抽取子串相反,删除子串是指将原字符串中符合条件的子串删除,删除子串命令只有${...}格式的,但是,删除子串命令可以分为从开头处删除和从结尾处删除两种不同的命令。首先,我们介绍从开头处删除子串的命令,有以下两种格式
1. ${string#substring} //删除string开头处与substring匹配的最短子串
2. ${string##substring} //删除string开头处与substring匹配的最长子串
从结尾处删除子串,格式如下:
1. ${string%substring} //删除string结尾处与substring匹配的最短子串
2. ${string%%substring} //删除string结尾处与substring匹配的最长子串
注: substring不是正则表达式,但是可以在substring中使用*字符,其中*字符有特殊的意义,表示起始字符和终止字符之间的任意字符
六: 替换子串
替换子串都是${...}格式的,可以在任意处(也包括开头处和结尾处)替换满足条件的子串,首先介绍在任意处替换子串的命令,有以下两种格式
1. ${string/substring/replacement} //仅替换第一次与substring相匹配的子串
2. ${string//substring/replacement} //替换所有与substring相匹配的子串
替换子串命令还有两种格式,分别为在string开头处和结尾处替换与substring相匹配的子串,格式为
1. ${string/#substring/replacement} //替换string开头处与substring相匹配的子串
2. ${string/%substring/replacement} //替换string结尾处 与substring相匹配的子串
注: substring不是正则表达式,但是可以在substring中使用*字符,其中*字符有特殊的意义,表示起始字符和终止字符之间的任意字符
本文摘录自:Linux Shell编程 从初学到精通 第9章第2节内容