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
  • 相关阅读:
    错误:you (root) are not allowed to access to (crontab) because of pam configuration.
    linux自定义登录提示信息
    oracle错误IMP-00013: only a DBA ……
    将MyBatis Mapper xml 放到 jar 包外面
    ApplicationContextAware
    Netty ChannelFuture 监听三种方法
    Intellij 查找排除JAR包的依赖关系(Maven Helper)
    Nacos 服务状态监听四种写发
    Docker 常用命令
    Nginx 安装配置
  • 原文地址:https://www.cnblogs.com/oxspirt/p/7242837.html
Copyright © 2011-2022 走看看