zoukankan      html  css  js  c++  java
  • shell字符串处理

    一、字符串切片:

    ${#var}:返回字符串变量var的长度
    ${var:offset}:返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,到最后的部分,offset的取值在0到 ${#var}-1 之间(bash4.2后,允许为负值)
    ${var:offset:number}:返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,长度为number的部分
    ${var: -length}:取字符串的最右侧几个字符,注意:冒号后必须有一空白字符
    ${var:offset:-length}:从最左侧跳过offset字符,一直向右取到距离最右侧lengh个字符之前的内容
    ${var: -length:-offset}:先从最右侧向左取到length个字符开始,再向右取到距离最右侧offset个字符之间的内容,注意:-length前空格,同样的表达形式,offset的表现行为和数组的是反着的。

    字符串切片实例:

    1. a='abcdefghijklmn'
    2. echo ${#a} #输出字符串a的总长度
    3. 14
    4. echo ${a:4} #输出字符串a从0开始数,包含第4个元素之后的所有元素
    5. efghijklmn
    6. echo ${a:4:3} #输出字符串a从0开始数,包含第4个元素之后的3个元素
    7. efg
    8. echo ${a: -4} #从字符串a的右侧向左取4个元素,冒号后必须有一个空字符
    9. klmn
    10. echo ${a:5:-2} #输出字符串a从0开始数,包含第5个元素的向右数的i倒数3个元素,注意这种用法依赖bash版本,尽量别用。
    11. fghijkl
    12. echo ${a: -5:-2} #从字符串a的右侧向左数5个,再向右取到倒数3个字符,注意这种用法依赖bash版本,尽量别用。
    13. jkl
    14. echo ${a: -5:2} #从字符串a的右侧向左数5个,再向右取2个字符
    15. jk

    二、基于模式取子串

    ${var#*word}:其中word可以是指定的任意字符功能:自左而右,查找var变量所存储的字符串中,第一次出现的word, 删除字符串开头至第一次出现word字符之间的所有字符
    ${var##*word}:同上,贪婪模式,不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容
    ${var%word*}:其中word可以是指定的任意字符;功能:自右而左,查找var变量所存储的字符串中,第一次出现的word, 删除字符串最后一个字符向左至第一次出现word字符之间的所有字符;
    ${var%%word*}:同上,只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符;

    字符处理实例:

    1. a='abcdefg_a_fghijklmn'
    2. echo ${a#*fg} #从左边开始删,删除起始位置到第一个fg为止,包括fg
    3. _a_fghijklmn
    4. echo ${a##*fg} #贪婪模式,左边开始删,删除起始位置到最后一个fg为止,包括fg
    5. hijklmn
    6. echo ${a%fg*} #从右边开始删,删除终点位置到第一个fg为止,包括fg
    7. abcdefg_a_
    8. echo ${a%%fg*} #贪婪模式,从右边开始删,删除重点位置到最后一个fg为止,包括fg
    9. abcde

    三、字符串的查找替换

    ${var/pattern/substr}:查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替换之
    ${var//pattern/substr}: 查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替换之
    ${var/#pattern/substr}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之
    ${var/%pattern/substr}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之

    查找替换实例:

    1. a='abcdefg_a_fghijklmn'
    2. echo ${a/fg/dd} #替换从左边数第一个fg为dd
    3. abcdedd_a_fghijklmn
    4. echo ${a//fg/dd} #替换字符串中所有的fg为dd
    5. abcdedd_a_ddhijklmn
    6. echo ${a/#ab/dd} #如果开头是ab则替换成dd
    7. ddcdefg_a_fghijklmn
    8. echo ${a/#fd/dd} #如果开头是fd则替换成dd
    9. abcdefg_a_fghijklmn #开头不是fd不做替换
    10. echo ${a/%mn/dd} #结尾是mn则替换成dd
    11. abcdefg_a_fghijkldd
    12. echo ${a/%fd/dd} #如果结尾是fd则替换成dd
    13. abcdefg_a_fghijklmn #结尾并不是fd不做替换

    四、查找并删除字符串

    和查找替换类似,只不过没有替换值

    ${var/pattern}:删除var所表示的字符串中第一次被pattern所匹配到的字符串
    ${var//pattern}:删除var所表示的字符串中所有被pattern所匹配到的字符串
    ${var/#pattern}:删除var所表示的字符串中所有以pattern为行首所匹配到的字符串
    ${var/%pattern}:删除var所表示的字符串中所有以pattern为行尾所匹配到的字符串

    和查找替换语法一样,只不过没有替换值和斜线,这里就不做演示了。

    五、符大小写转换

    ${var^^}:把var中的所有小写字母转换为大写
    ${var,,}:把var中的所有大写字母转换为小写

    总结:使用shell内部的字符串处理功能能提高很多的工作效率,以及节省部分机器性能,但是需要注意的一点,字符串处理变量的值并不会改变变量的数据,只是输出的时候进行了变更。

    六、字符串变量赋值

    使用字符串的变量赋值,可以代替部分的if else让语法更简洁。

     

  • 相关阅读:
    setup slack检查
    关于derive_pll_clock
    STA中的postmap和postfit
    sdc中对I/O口的约束set_input/output_delay
    hold slack的计算
    DDR I 和DDR II的简单比较
    ORA00600: 内部错误代码,参数: [kcratr1_lostwrt], [], [], [], [], [], [], []
    linux解压超过2G大文件
    linux 安装apache2.2.4
    plsql developer导出csv乱码问题
  • 原文地址:https://www.cnblogs.com/momenglin/p/8485655.html
Copyright © 2011-2022 走看看