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 开始

上一篇:PHP 通过构造器进行依赖注入 demo


下一篇:blender, fbx导入blender进行编辑