字符串处理方式

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

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

Shell 字符串处理的更多相关文章

  1. linux shell 字符串操作(长度,查找,替换)详解

    linux shell 字符串操作(长度,查找,替换)详解 在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系 ...

  2. Shell 字符串比较

    转自网络 Shell字符串比较 收藏 Shell 中整数比较方法及字符串的比较方法,如等于,不等于,大于,大于等于,小于,等等. 二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别. --- ...

  3. shell字符串操作详解

    shell字符串操作详解的相关资料. 1.shell变量声明的判断  表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DE ...

  4. 【转】shell字符串截取

    shell字符串的截取的问题: 一.Linux shell 截取字符变量的前8位,有方法如下: 1.expr substr “$a” 1 8 2.echo $a|awk ‘{print substr( ...

  5. shell字符串的用法

    shell字符串的用法 注意:shell4.2和shell4.1会有差别,较低版本的shell可能不支持某些功能 获取字符串长度:${#string} 获取子串: 注:(左边的第一个字符是用 0 表示 ...

  6. Linux脚本shell字符串处理

    Linux脚本shell字符串处理,基本都有了,看着搜吧 TLDP教堂 shell中if条件字符串.数字比对,[[ ]]和[ ]区别 Linux 之 shell 比较运算符 Linux Shell编程 ...

  7. 【Linux】shell字符串分割、数组访问、条件判断

    参考资料: shell字符串分割再循环:http://www.shangxueba.com/jingyan/1633455.html linux shell中 if else以及大于.小于.等于逻辑表 ...

  8. shell 字符串中定位字符位置 获取字符位置

    linux shell 字符串操作(长度,查找,替换)详解 该博文中描述的如下两个字符串操作, ${string:position} #在$string中, 从位置$position开始提取子串 ${ ...

  9. Shell字符串操作

    @1:子串削除 ${string#substring} 从$string 的开头位置截掉最短匹配的$substring. ${string##substring} 从$string 的开头位置截掉最长 ...

  10. Linux Shell系列教程之(五)Shell字符串

    本文是Linux Shell系列教程的第(五)篇,更多shell教程请看:Linux Shell系列教程 字符串是Shell编程中最常用最有用的数据类型,今天,Linux大学网就为大家介绍一下在She ...

随机推荐

  1. C# WebClient实现文件上传

    一.同步上传 文章 https://www.cnblogs.com/duanjt/p/6420172.html 里面有提到服务端通过WebApi如何实现文件上传,这里就只说客户端使用WebClient ...

  2. RobotFramework自动化测试框架-Selenium Web自动化(-)-Open Browser和Close Browser

    Selenium出来已经有很多年了,从最初的Selenium1到后来的Selenium2,也变得越来越成熟,而且也已经被很多公司广泛使用.Selenium发展的过程中,分了很多模块,这里我们主要介绍W ...

  3. SQLServer2008 查询分析器内容未保存,查找分析器内容

    位置:C:\Users\Administrator\Documents\SQL Server Management Studio\Backup Files\Solution1

  4. vue单位文本控件与vue加密文本控件

    vue单位文本控件: 使用方式: npm install dami-text-input --save 使用: <text-input v-model="test" :uni ...

  5. linux mkdir命令

    1 mkdir,创建一个空目录. 比如:mkdir test 2 mkdir -p,递归创建目录. 比如:mkdir -p a/b.迭代创建. 3 mkdir -m 777 d 创建权限为777的目录 ...

  6. Linux三种网络连接模式

    https://www.cnblogs.com/linjiaxin/p/6476480.html 三种模式的区别:https://www.cnblogs.com/itxiaok/p/10358055. ...

  7. 百度AI开放平台 情感倾向分析实例以及gbk编码解决

    f=open('test.txt','a+',encoding='utf-8') for index,row in cxzg.iterrows(): text=str(row['text']) tex ...

  8. MySQL常用的七种表类型(转)

    MySQL常用的七种表类型(转)   其实MySQL提供的表类型截至到今天已经有13种,各有各的好处,但是民间流传的常用的应该是7种,如果再细化出来,基本上就只有两种:InnoDB.MyIASM两种. ...

  9. docker 安装redis , 让宿主机可以访问

    1, docker 拉去最新版本的redis docker pull redis #后面可以带上tag号, 默认拉取最新版本 2, docker安装redis container 安装之前去定义我们的 ...

  10. 基于Protostuff实现的Netty编解码器

    在设计netty的编解码器过程中,有许多组件可以选择,这里由于咱对Protostuff比较熟悉,所以就用这个组件了.由于数据要在网络上传输,所以在发送方需要将类对象转换成二进制,接收方接收到数据后,需 ...