shell系列学习之字符串

本文参考文章:https://blog.csdn.net/taiyang1987912/article/details/39152003


#{...}、${#...}由一些特殊符号组成的表达式和expr都可以进行字符串的一部分处理。

expr引出通用求值表达式,可以实现算术操作、比较操作、字符串操作和逻辑操作等功能。

(1)计算字符串长度

字符串名为string,可以使用命令${#string}或expr length $string两种方法来计算字符串的长度。若string包括空格,需用双引号引起来(expr length后面只能跟一个参数,string有空格会当作多个参数处理)。


 

注意:expr length "$string"一定要加引号,否则会报错。

(2)子串匹配索引

      expr的索引命令格式为:expr index $string $substring(子串),在字符串$string上匹配$substring中字符第一次出现的位置,匹配不到,expr index返回0。

"wo"在字符串string中虽然出现在第7,但还是返回o首次出现的位置5。(看起来,匹配substring中任意一个字符在string中第一次出现的索引)

(3)子串匹配的长度

       expr match $string $substring,在string的开头匹配substring字符串,返回匹配到的substring字符串的长度,若string开头匹配不到则返回0,其中substring可以是字符串也可以是正则表达式。

"world"尽管在string中出现,但是未出现在string的开头处,因此返回0。

(4)抽取子串

Bash Shell提供两种命令#{...}和expr实现抽取子串功能。

expr substr

expr substr也能够实现抽取子串功能,命令格式:expr substr $string $position $length,与#{...}最大不同是expr substr命令从1开始进行标号。

接着使用正则表达式抽取子串的命令,但只能抽取string开头处或结尾处的子串。

抽取字符串开头处的子串:

格式一:expr match $string '$substring$substring'。

格式二:expr $string : '$substring$substring',其中冒号前后都有一个空格,并且没有match关键字

抽取字符串结尾处的子串:

格式一:expr match $string '.*$substring$substring'。

格式二:expr $string : '.*$substring$substring'。.*表示任意字符的任意重复,抽取的值是()中的那部分字符,(...)中一个点表示一个字符,几个点就表示从尾部取几个字符


#{...}

其中#{...}有两种格式。

格式一:#{string:position}从名称为$string的字符串的第$position个位置开始抽取子串,从0开始标号。

格式二:#{string:position:length}增加$length变量,表示从$string字符串的第$position个位置开始抽取长度为$length的子串。

#{...}还提供了从string右边开始计数抽取子串的功能。

格式一:#{string: -position},冒号与横杠间有一个空格。

格式二:#{string:(position)}

(5)删除子串

删除字串是指将原字符串中符合条件的子串删除,命令只有${...}格式。

从string开头处删除子串:

格式一:${string#substring},删除开头处与substring匹配的最短子串。

格式二:${string##substring},删除开头处与substring匹配的最长子串。其中substring并非是正则表达式而是通配符。


从string结尾处开始删除:

格式一:${string%substring},删除结尾处与substring匹配的最短子串。

格式二:${string%%substring}删除结尾处与substring匹配的最长子串。与上述命令仅在#和%之间不同。

(6)替换子串

替换子串命令都是${...},可以在任意处、开头处、结尾处替换满足条件的子串。其中的substring都不是正则表达式而是通配符。

在任意处替换子串命令:

格式一:${string/substring/replacement},仅替换第一次与substring相匹配的子串。

格式二:${string//substring/replacement},替换所有与substring相匹配的子串。


在开头处替换与substring相匹配的子串,格式为:${string/#substring/replacement}。

在结尾除替换与substring相匹配的子串,格式为:${string/%substring/replacement}。

猜你喜欢

转载自blog.csdn.net/daisy2001daisy/article/details/106309777