• SHELL脚本编程-字符串处理


              SHELL脚本编程-字符串处理

                                       作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.字符串切片

    [root@node101.yinzhengjie.org.cn ~]# echo {A..Z}
    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo {A..Z}|tr -d " "
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# `echo {A..Z}|tr -d " "`
    -bash: ABCDEFGHIJKLMNOPQRSTUVWXYZ: command not found
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# str=`echo {A..Z}|tr -d " "`
    [root@node101.yinzhengjie.org.cn ~]# echo $str
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    [root@node101.yinzhengjie.org.cn ~]# echo ${#str}                   #返回字符串变量var的长度
    26
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${str:10}                 #返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,到最后的部分,offset的取值在0 到 ${#var}-1 之间(bash4.2后,允许为负值)
    KLMNOPQRSTUVWXYZ
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${str: 10:-3}             #从最左侧跳过offset字符,一直向右取到距离最右侧lengh个字符之前的内容(注意:"10"前面是有空格的)
    KLMNOPQRSTUVW
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${str:10:3}               #返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,长度为number的部分
    KLM
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${str: -3}                  #取字符串的最右侧几个字符(注意:冒号后必须有一空白字符)
    XYZ
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${str: -5:-2}              #先从最右侧向左取到length个字符开始,再向右取到距离最右侧offset个字符之间的内容(注意:"-5"前面时有空格的)
    VWX
    [root@node101.yinzhengjie.org.cn ~]# 

    二.字符串处理

    1>.基于模式取子串

    ${var#*word}:
        其中word可以是指定的任意字符
        功能:自左而右,查找var变量所存储的字符串中,第一次出现的word, 删除字符串开头至第一次出现word字符串(含)之间的所有字符
    
    ${var##*word}:
        同上,贪婪模式,不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容
    
    ${var%word*}:
      其中word可以是指定的任意字符
      功能:自右而左,查找var变量所存储的字符串中,第一次出现的word, 删除字符串最后一个字符向左至第一次出现word字符串(含)之间的所有字符
    
    ${var%%word*}:
      同上,只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符
    [root@node101.yinzhengjie.org.cn ~]# getent passwd root
    root:x:0:0:root:/root:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# rootinfo=`getent passwd root`
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $rootinfo 
    root:x:0:0:root:/root:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${rootinfo#*root} 
    :x:0:0:root:/root:/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${rootinfo##*root} 
    :/bin/bash
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${rootinfo%/*}
    root:x:0:0:root:/root:/bin
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${rootinfo%%/*}
    root:x:0:0:root:
    [root@node101.yinzhengjie.org.cn ~]# 
    参考案例1
    [root@node101.yinzhengjie.org.cn ~]# file="/var/log/messages"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $file 
    /var/log/messages
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${file#*/} 
    var/log/messages
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${file##*/} 
    messages
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${file%/*}
    /var/log
    [root@node101.yinzhengjie.org.cn ~]# 
    参考案例2
    [root@node101.yinzhengjie.org.cn ~]# url1="https://www.cnblogs.com:80"
    [root@node101.yinzhengjie.org.cn ~]# url2="ftp://node101.yinzhengjie.org.cn:21"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${url1%%:*}         #取出协议
    https
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${url2%%:*} 
    ftp
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${url1##*:}         #取出端口号
    80
    [root@node101.yinzhengjie.org.cn ~]# echo ${url2##*:} 
    21
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${url1##*/} 
    www.cnblogs.com:80
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${url2##*/} 
    node101.yinzhengjie.org.cn:21
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $url1 | sed -nr 's/.*/(.*):.*/1/p'
    www.cnblogs.com
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $url2 | sed -nr 's/.*/(.*):.*/1/p'
    node101.yinzhengjie.org.cn
    [root@node101.yinzhengjie.org.cn ~]# 
    参考案例3

    2>.查找替换

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

    ${var/#pattern/substr}:
      查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之
    ${var
    /%pattern/substr}:
      查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之
    [root@node101.yinzhengjie.org.cn ~]# url="ftp://node101.yinzhengjie.org.cn:21"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $url
    ftp://node101.yinzhengjie.org.cn:21
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${url/node101/www}
    ftp://www.yinzhengjie.org.cn:21
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${url/:/#}
    ftp#//node101.yinzhengjie.org.cn:21
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${url//:/#}
    ftp#//node101.yinzhengjie.org.cn#21
    [root@node101.yinzhengjie.org.cn ~]# 
    参考案例

    3>.查找并删除

    ${var/pattern}:
      删除var表示的字符串中第一次被pattern匹配到的字符串
    ${var
    //pattern}:
      删除var表示的字符串中所有被pattern匹配到的字符串

    ${var/#pattern}:
      删除var表示的字符串中所有以pattern为行首匹配到的字符串
    ${var
    /%pattern}:
      删除var所表示的字符串中所有以pattern为行尾所匹配到的字符串
    [root@node101.yinzhengjie.org.cn ~]# url="ftp://node101.yinzhengjie.org.cn:21"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $url
    ftp://node101.yinzhengjie.org.cn:21
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${url/:}
    ftp//node101.yinzhengjie.org.cn:21
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${url//:}
    ftp//node101.yinzhengjie.org.cn21
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    参考案例

    4>.字符大小写转换

    ${var^^}:
      把var中的所有小写字母转换为大写
    
    ${var,,}:   把var中的所有大写字母转换为小写
    [root@node101.yinzhengjie.org.cn ~]# url="ftp://NODE101.yinzhengjie.org.cn:21"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $url
    ftp://NODE101.yinzhengjie.org.cn:21
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${url^^}        #将所有字母转换成大写
    FTP://NODE101.YINZHENGJIE.ORG.CN:21
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${url,,}        #将所有字母转换成小写
    ftp://node101.yinzhengjie.org.cn:21
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    参考案例
  • 相关阅读:
    nightwatchjs --Expect element to not include text
    Iterating elements using NightWatchJS
    nightwatch 切换窗口
    nodejs读取配置文件
    spring 事务
    重载,重写,重构
    python 元组不变 列表可变
    WebStorm ES6 语法支持设置
    docker日志
    curl -O 下载文件
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/11931141.html
Copyright © 2020-2023  润新知