• shell字符串截取


    前沿

    在编写shell脚本的时候,很多情况下,我们都会遇到截取字符串的一部分这种需求。由于不同的原始字符串差距较大,导致解决这个的方法也分不同的情况。
    所以这篇文章不可能一次性的全部写完,我会边写边改,也会不停的升级更新。

    知道关键字进行截取

    第一种情况是字符串只有一行,且这一行的内容没有什么特殊的分隔符,比如每个字段之间用空格分开。
    也就是说这是一串乱码字符串,我们需要在这串乱码字符串中截取某一个关键字之前或者之后的内容。

    // 下面的varible表示的是需要处理的字符串变量
    // string是需要在变量中搜索匹配的字符串
    // “*”是一个通配符,位置按照下面的配置即可
    
    ${varible#*string}          // 从左向右截取第一个string后的字符串
    ${varible##*string}        // 从左向右截取最后一个string后的字符串
    
    ${varible%%string*}     // 从右向左截取最后一个string后的字符串
    ${varible%string*}        // 从右向左截取第一个string后的字符串
    
    

    通过观察上面的描述,想必大家都清楚怎么使用了吧:

    • 从左往右,用井号操作符;
    • 从左往右,通配符在字符串左边;
    • 从右往左,用百分号操作符;
    • 从右往左,通配符在字符串的右边;
    • 从第一个查找,用一个操作符;
    • 从最后一个查找,用两个操作符;

    下面进行举例说明:
    先假设我需要处理的字符串是MyVar。

    MyVar=Test1Test2Test3LuanMaTest2Test3.Test4       //  定义变量MyVar
    echo $MyVar                //  将MyVar这个变量打印出来
    //得到的结果是:       Test1Test2Test3LuanMaTest2Test3.Test4
    
    echo ${MyVar#*Test2}
    //得到的结果是:        Test3LuanMaTest2Test3.Test4
    echo ${MyVar##*Test2}
    //得到的结果是:        Test3.Test4
    
    echo ${MyVar%Test2*}
    //得到的结果是:        Test1Test2Test3LuanMa
    echo ${MyVar%%Test2*}
    //得到的结果是:        Test1
    

    知道字符串的具体位置进行截取

    假设我们需要从原来字符串中截取一个固定位置的子字符串,那么可以用类似于编程语言中的索引进行截取。

    ${varible:n1:n2}        ## 截取变量varible从n1开始的n2个字符,组成一个子字符串。
    ## 注意是n1开始,然后是截取n2个字符,并不是截取到n2的位置
    
    ## 继续以上面的$MyVar 为例进行说明
    echo ${MyVar:5:10}
    ##得到的结果是:      Test2Test3
    

    以上两种方式都针对的是简单的字符串,也就是一行乱码字符串的情况下,进行处理。
    其余的待续。

  • 相关阅读:
    初始化类的对象时代码的执行顺序
    非原子的 64 位操作
    守护线程
    Redis
    Redis
    Redis
    Redis
    好听美文随手记
    往服务器数据库插入数据报错,在本地数据库测试却无错误。
    关于云服务器中发送邮件,出现无法从传输连接中读取数据:
  • 原文地址:https://www.cnblogs.com/weifeng1463/p/12132559.html
Copyright © 2020-2023  润新知