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
  • 相关阅读:
    luoguP3181 [HAOI2016]找相同字符
    luoguP4248 [AHOI2013]差异
    luoguP2852 [USACO06DEC]Milk Patterns
    后缀自动机
    luoguP3975 [TJOI2015]弦论
    luoguP2824 [HEOI2016/TJOI2016]排序(线段树分裂做法)
    组合数学学习笔记
    「题解」:[BZOJ2938]病毒 (AC自动机+dfs)
    Linux新人报到
    指针学习笔记
  • 原文地址:https://www.cnblogs.com/oxspirt/p/7242837.html
Copyright © 2011-2022 走看看