zoukankan      html  css  js  c++  java
  • shell中的字符串操作

    SHELL字符串操作

    bash Shell提供了多种字符串处理的命令:

    • awk命令
    • expr命令

    字符串长度

    • ${#..}
    • expr length
    • awk的length(s)
      实例:
      string=”hello world”
      ${#string}
      expr length “$string”
      注意:双引號是必须的。由于字符串有空格

    匹配子串

    格式:expr match $string $substring
    作用:在string的开头匹配substring,返回匹配到的长度,在string开头匹配不到substring则返回0,substring能够是正則表達式
    string=”welcome to our world”

    命令 返回值
    expr match “$string” w.* 20
    expr match “$string” ou.* 0

    公共字符的索引

    格式:expr index $string $sunstring
    作用:在字符串string上匹配substring中字符第一次出现的字符
    string=”welcome to our world”

    命令 返回值
    expr index “$string” our 5
    expr index “$string” d 20
    expr index “$string” s 0

    执行发现。expr index的功能是寻找两个串之间的第一个公共字符

    截取子串

    • 从左截取
      • ${string:position}
      • ${string:position:length}
    • 从右截取
      • ${string: -position}(冒号后面有一个空格)
      • ${string:(position)}
      • ${string: -position:length}
      • ${string:(position):length}

    expr substr
    格式:expr substr $string $position $length
    ${}的差别:${}的position从0開始给string标号;expr sutstr的position从1開始给string标号
    string=”welcome to our world”

    命令 返回值
    echo ${string:1:8} elcome t
    expr substr “$string” 2 8 elcome t

    正則表達式截取子串
    使用正則表達式仅仅能抽取string开头处或结尾处的子串。
    - expr match $string ‘($substring)’
    - expr $string : ‘($substring)’

    命令 返回值
    expr match “$another” “[0-9]*” 8
    expr match “$another” “([0-9]*)” 20091114
    expr “$another” : “([0-9]*)” 20091114

    注意:冒号两側有空格

    删除子串

    • ${string#substring}
      删除string开头处与substring匹配的最短子串
    • ${string##substring}
      删除string开头处与substring匹配的最长子串
    • ${string%substring}
      删除string结尾处与substring匹配的最短子串
    • ${string%%substring}
    • 删除string结尾处与substring匹配的最长子串

    substring并不是正則表達式
    20091114 Reading Hadoop

    命令 结果
    echo “${another#2*1}” 114 Reading Hadoop
    echo “${another##2*1}” 4 Reading Hadoop
    echo “${another%a*p}” 20091114 Reading H
    echo “${another%%a*p}” 20091114 Re

    替换子串

    • ${string/substring/replacement}
      仅替换第一次与substring相匹配的子串
    • ${string//substring/replacement}
      替换全部与substring相匹配的子串
    • ${string/#substring/replacement}
      替换string开头处与substring相匹配的子串
    • ${string/%substring/replacement}
      替换string结尾处与substring相匹配的子串

    string=”20001020year20050509month”

    命令 结果
    echo ${string/200/201} 20101020year20050509month
    echo ${string/200/201} 20101020year20150509month
    echo ${string/r*h/} 20001020yea
    echo ${string/#2000/2010} 20101020year20050509month
    echo ${string/%month/MONTH} 20001020year20050509MONTH
  • 相关阅读:
    C#下如何用NPlot绘制期货股票K线图(3):设计要显示的股票价格图表窗口并定义相应类的成员及函数
    C#下如何用NPlot绘制期货股票K线图(2):读取数据文件让K线图自动更新
    C#下如何用NPlot绘制期货股票K线图(1)?
    freemarker 常见问题
    关于Bootstrap table的回调onLoadSuccess()和onPostBody()使用小结
    mybatis 联表查询
    用mysql存储过程代替递归查询
    MYSQL 级联 添加外键
    IntelliJ Idea 常用快捷键列表
    MySQL大数据量分页查询方法及其优化
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7306268.html
Copyright © 2011-2022 走看看