zoukankan      html  css  js  c++  java
  • Web服务器:shell字符串处理

    字符串长度

    shell>echo ${#string}
    shell>expr length $string
    shell>expr "$string" : '.*'
    

    匹配字符串开头的子串长度

    expr match "$string" '$substring'
         $substring 是一个正则表达式.
    expr "$string" : '$substring'
    

    索引

    expr index $string $substring
    

    提取子串

    ${string:position}
         在$string 中从位置$position开始提取子串.
         如果$string 是"*"或者" @ ", 那么将会提取从位置$position开始的位置参数. [1]
    ${string:position:length}
         在$string 中从位置$position开始提取$length 长度的子串.
    
    stringZ=abcABC123ABCabc
    #       0123456789.....
    #       0-based indexing.
    echo ${stringZ:0}                     # abcABC123ABCabc
    echo ${stringZ:1}                     # bcABC123ABCabc
    echo ${stringZ:7}                     # 23ABCabc
    echo ${stringZ:7:3}                   # 23A
                                           # 提取子串长度为3.
    # 能不能从字符串的右边(也就是结尾)部分开始提取子串?
    echo ${stringZ:-4}                    # abcABC123ABCabc
    # 默认是提取整个字符串, 就象${parameter:-default} 一样.
    # 然而 . . .
    echo ${stringZ:(-4)}                  # Cabc
    echo ${stringZ: -4}                   # Cabc 注意,":"右边有一个空格!
    # 这样, 它就可以工作了.
    # 使用圆括号或者添加一个空格可以"转义"这个位置参数.
    
    


    如果$string 参数是"*"或" @ ", 那么将会从$position位置开始提取 $length 个位置参数, 但是由于
    可能没有$length 个位置参数了, 那么就有几个位置参数就提取几个位置参数.

    echo ${*:2}  # 打印出第2个和后边所有的位置参数.
    echo ${@:2}  # 同上.
    echo ${*:2:3}  # 从第2个开始, 连续打印3个位置参数.
    

    expr substr $string $position $length
         在$string 中从$position开始提取$length 长度的子串.

    echo `expr substr $stringZ 1 2`
    echo `expr substr $stringZ 4 3`
    
    


    expr match "$string" '\($substring\)'
         从$string 的开始位置提取$substring , $substring 是正则表达式.
    expr "$string" : '\($substring\)'
         从$string 的开始位置提取$substring , $substring 是正则表达式.

    stringZ=abcABC123ABCabc
    #       =======
    echo `expr match "$stringZ" '\(.[b-c]*[A-Z]..[0-9]\)'`
    echo `expr "$stringZ" : '\(.[b-c]*[A-Z]..[0-9]\)'`
    echo `expr "$stringZ" : '\(.......\)'`
    # 上边的每个echo 都打印出相同的结果.  abcABC1
    



    expr match "$string" '.*\($substring\)'
         从$string 的结尾提取$substring , $substring 是正则表达式.
    expr "$string" : '.*\($substring\)'
         从$string 的结尾提取$substring , $substring 是正则表达式.

    expr match "$stringZ" '.*\([A-C][A-C][A-C][a-c]*\)'
    ABCabc
    expr "$stringZ" : '.*\(......\)'
    ABCabc
    
    


    子串削除

    ${string#substring}
         从$string 的开头位置截掉最短匹配的$substring .
    ${string##substring}
         从$string 的开头位置截掉最长匹配的$substring .
    
    ${string%substring}
         从$string 的结尾位置截掉最短匹配的$substring .
    ${string%%substring}
         从$string 的结尾位置截掉最长匹配的$substring .
    
    echo ${stringZ%b*c}        # abcABC123ABCa
    # 从$stringZ 的结尾位置截掉'b' 到'c' 之间最短的匹配.
    echo ${stringZ%%b*c}     #a
    # 从$stringZ 的结尾位置截掉'b' 到'c' 之间最长的匹配.
    


    当你需要构造文件名的时候, 这个操作就显得特别有用.

    子串替换

    ${string/substring/replacement}
         使用$replacement 来替换第一个匹配的$substring .
    ${string//substring/replacement}
         使用$replacement 来替换所有匹配的$substring .
    
    
    ${string/#substring/replacement}
         如果$substring 匹配$string 的开头部分, 那么就用$replacement 来替换$substring .
    ${string/%substring/replacement}
         如果$substring 匹配$string 的结尾部分, 那么就用$replacement 来替换$substring 
    

         
    [从书本上摘录下来,对于字符串的处理,熟练运用了Bash提供的这些操作,一般的应用还是都能处理好]

  • 相关阅读:
    ThreadLocal分析学习
    探究.NET的bin引用程序集运行机制看.NET程序集部署原理
    ASP.NET网页代码模型分析
    JBPM与设计模式之职责链模式
    根据webform页面大小的变化动态调整控件的大小
    jbpm binding类深入解析
    JBPM与软件架构模式之命令模式
    JBPM对象主键生成机制
    主键思维定势导致的惨案
    电脑安装windows server 2008 导致磁盘分区消失解决方法
  • 原文地址:https://www.cnblogs.com/aggavara/p/2799467.html
Copyright © 2011-2022 走看看