zoukankan      html  css  js  c++  java
  • shell中的四种模式匹配

    POSIX为shell为进行模式匹配提供了四种参数替换结构(老版本的shell可能不支持),每种结构有两个参数:变量名(或变量号)及模式。
    第一种模式:
       ${variable%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最短的匹配模式
    第二种模式:
       ${variable%%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式
    第三种模式:
       ${variable#pattern} 这种模式时,shell在variable中查找,看它是否一给的模式pattern开始,如果是,就从命令行把variable中的内容去掉左边最短的匹配模式
    第四种模式:
       ${variable##pattern} 这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式
    这四种模式中都不会改变variable的值,其中,只有在pattern中使用了*匹配符号时,%和%%,#和##才有区别。

    [root@root shell]# var=testcase
    [root@root shell]# echo $var
    testcase
    [root@root shell]# echo ${var%s*e} 从最右边删除最短匹配
    testca
    [root@root shell]# echo $var
    testcase
    [root@root shell]# echo ${var%%s*e} 从最右边删除最长匹配
    te
    [root@root shell]# echo $var  变量没有改变
    testcase
    [root@root shell]# echo ${var#?e} 从最左边删除最短匹配
    stcase
    [root@root shell]# echo $var
    testcase
    [root@root shell]# echo ${var#*e}  从最左边删除最短匹配
    stcase
    [root@root shell]# echo $var
    testcase
    [root@root shell]# echo ${var##*e} 从最左边删除最长匹配,即删除所有

    [root@root shell]# echo $var
    testcase
    [root@root shell]# echo ${var##*s} 从最左边删除最长匹配
    e
    [root@root shell]# echo $var
    testcase
    [root@root shell]# echo ${var#test} 删除test
    case
    [root@root shell]# echo $var
    testcase
    [root@root shell]# echo ${var#tests} 没有匹配
    testcase
    [root@root shell]#

    另外
    var=97%
    var=${var%s?}
    echo $var #打印97
  • 相关阅读:
    mysql主从复制
    nginx代理tcp协议连接mysql
    spark安装配置
    DataX 3.0简介 安装及使用
    Consul 快速入门
    Etcd 使用入门
    常见负载均衡算法
    Container is running beyond memory limits
    HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}
    快速搞定Windows10环境下hadoop安装和配置
  • 原文地址:https://www.cnblogs.com/oxspirt/p/7242837.html
Copyright © 2011-2022 走看看