shell编程:字符串处理方式

字符串处理方式

  • 计算字符串长度
  • 获取子串在字符串中的索引位置
  • 计算子串长度
  • 抽取(截取)字串

1、计算字符串长度,有两种方式

  $ ${#string}

  $ expr length "$string"   // 如果 string 里面包含空格,则 $string 加上双引号,建议一直加上

  注意:mac没有 expr命令,xshell登陆 linux服务器可以执行 expr命令

例1: 

  $ var="java python golang kafka"

  $ len=${#var}

  $ echo len

  打印结果:24

 

  $ len=`expr length "$var"`  // 这里要用反引号 ` ` 。

  $ echo $len

  打印结果:24 

2、获取子串在字符串中的索引位置(本质上是 将子串拆分成很多单个的字符,然后看哪个字符最先在字符串中出现,则返回这个字符的索引位置)

  $ expr index $string $substring

例2:

  $ var="quickstart is a app"

  $ ind=`expr index "$var" start`

  $ echo $ind

  打印结果:6    // 下标从 1 开始数

 

  $ ind=`expr index "$var" uniq`

  $ echo $ind

  打印结果:1     // 'q' 这个字符最先出现在字符串中,并且位置是 1

 

3、获取子串的长度

  expr match $string substr

例3:

  $ var="quickstart is a app"

  $ sub_len=`expr match "$var" app`     // 需要从头匹配,并且匹配成功,否则返回 0

  $ echo $sub_len   

  打印结果:0

 

  $ sub_len=`expr match "$var" quic`   // 正常匹配

  $ echo $sub_len

  打印结果:4

 

  $ sub_len=`expr match "$var" qui.*`      // 获取整个字符串的长度

  $ echo $sub_len

  打印结果:19

 

  $ sub_len=`expr match "$var" quik`   // 匹配失败

  $ echo $sub_len

  打印结果:0

 

4、抽取子串,五种方式

  $ ${string:position}   // 从 string 的 position 开始

  $ ${string:position:length}   // 从 string 的 position 开始,取 length 个长度的字符

  $ ${string: -position}    // 从右边开始匹配,注意":" 和 "-" 之间有空格

  $ ${string:(position)}    // 从左边开始匹配

  $ expr substr $string $position $length  // 从 position 开始,匹配长度为length

例4:

  $ var="java python golang kafka"

  $ substr1=${var:3}    // 下标从 0 开始,下标为 3 的字符刚好是 a

  $ echo $substr1

  打印结果:a python golang kafka

 

  $ substr2=${var:3:5}

  $ echo $substr2

  打印结果:a pyt

 

  $ substr3=${var: -5}    // 最后一个字符为 -1。  等价于:substr3=${var:(-5)} 

  $ echo $substr3

  打印结果:kafka  

 

  $ substr3_1=${var: -5:2}     // 扩展一个

  $ echo $substr3_1

  打印结果:ka

 

  $ substr4=${var:(5)}    // 从左边第5个开始取

  $ echo $substr4

  打印结果:python golang kafka 

 

  $ substr5=`expr substr "$var" 10 5`     // expr 下标从 1 开始,然后从第 10 个开始取

  $ echo $substr5

  打印结果:on go

 

注意:expr 方式下标从 1 开始; ${ }方式下标从 0 开始

posted @ 2019-10-14 18:21  豆浆D  阅读(386)  评论(0编辑  收藏  举报