Shell 字符串处理

本文详细介绍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 开始

 

转载于:https://www.cnblogs.com/shenqidu/p/10567445.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值