Linux 的 bash shell 提供了多种形式的参数扩展表达式,可以获取变量自身的值,或者对变量值进行特定处理得到一个新的值,等等。
本篇文章对字符串变量值相关的参数扩展表达式进行汇总说明。

假设在 bash 中定义了 filepath=example/subdir/testfile.txt 这样一个变量,可以使用下面的参数扩展来获取一些值:

  • ${filepath}
    获取 filepath 变量的值。
    例如,echo ${filepath} 命令打印的结果是 example/subdir/testfile.txt。
  • ${#filepath}
    获取到 filepath 变量值的字符个数,也就是字符串长度。
    例如,echo ${#filepath} 命令打印的结果是 27。
  • ${filepath:4:3}
    从 filepath 变量值开头的第 4 个字符开始,往后获取三个字符,得到一个子字符串。
    例如,echo ${filepath:4:3} 命令打印的结果是 ple。
    注意是从开头的第 0 个字符开始数起。
    这个表达式的格式是 ${parameter:offset:length},offset 指定从哪个位置开始获取字符,length 指定获取多少个字符。
  • ${filepath: -3:3}
    从 filepath 变量值倒数的第 3 个字符开始,往后获取三个字符,得到一个子字符串。
    例如,echo ${filepath: -3:3} 命令打印的结果是 txt。
    负数的 offset 表示倒数的偏移值。冒号和负号之间要加空格。
    注意是从末尾的第 1 个字符开始往前数。
  • ${filepath#*/}
    在 filepath 变量值中,从头开始匹配所给的 */ 这个模式,删除第一个匹配的模式,返回后面剩余的内容。
    这里用 * 通配符来匹配开头的任意字符串。
    例如,echo ${filepath#*/} 打印的结果是 subdir/testfile.txt。
    这个表达式的格式是 ${parameter#word},从 parameter 变量值中删除最短匹配 word 的前缀部分。
  • ${filepath##*/}
    在 filepath 变量值中,从头开始匹配所给的 */ 这个模式,一直删除到最后一个匹配的模式,返回后面剩余的内容。
    这里用 * 通配符来匹配开头的任意字符串。
    例如,echo ${filepath##*/} 打印的结果是 testfile.txt。
    这个表达式的格式是 ${parameter##word},从 parameter 变量值中删除最长匹配 word 的前缀部分。
  • ${filepath%/*}
    在 filepath 变量值中,从末尾往前匹配所给的 /* 这个模式,删除第一个匹配的模式,返回前面剩余的内容。
    这里用 * 通配符来匹配末尾的任意字符串。
    例如,echo ${filepath%/*} 打印的结果是 example/subdir。
    这个表达式的格式是 ${parameter%word},从 parameter 变量值中删除最短匹配 word 的后缀部分。
  • ${filepath%%/*}
    在 filepath 变量值中,从末尾往前匹配所给的 /* 这个模式,一直删除到最后一个匹配的模式,返回前面剩余的内容。
    这里用 * 通配符来匹配末尾的任意字符串。
    例如,echo ${filepath%%/*} 打印的结果是 example。
    这个表达式的格式是 ${parameter%%word},从 parameter 变量值中删除最长匹配 word 的后缀部分。
  • ${filepath/[et]/M}
    在 filepath 变量值中,把第一个匹配的小写字母 e、或者小写字母 t,替换成大写字母 M。
    这里用 [et] 路径名扩展来匹配小写字母 e、或者小写字母 t。
    这个表达式的格式是 ${parameter/pattern/string},把匹配 pattern 的字符串替换成 string 字符串。
    只替换第一个匹配的模式字符串。这个模式字符串可以位于变量值的开头、中间、以及末尾部分。
    例如,echo ${filepath/[et]/M} 打印的结果是 Mxample/subdir/testfile.txt。
  • ${filepath//[et]/M}
    在 filepath 变量值中,把所有匹配的小写字母 e、或者小写字母 t,替换成大写字母 M。
    这里用 [et] 扩展来匹配小写字母 e、或者小写字母 t。
    让 pattern 模式字符串以字符 ‘/’ 开头,表示替换所有匹配的字符串。
    例如,echo ${filepath//[et]/M} 打印的结果是 MxamplM/subdir/MMsMfilM.MxM。
  • ${filepath/subdir}
    在 filepath 变量值中,删除匹配的 subdir 字符串。
    例如,echo ${filepath/subdir} 打印的结果是 example//testfile.txt。
    这个表达式没有提供替换之后的字符串,表示删除所匹配的字符串。${parameter#word} 只能删除匹配的前缀${parameter%word} 只能删除匹配的后缀
    ${parameter/pattern} 可以删除任意位置的匹配字符串,包括中间位置
  • ${filepath^^}
    把 filepath 变量值的所有字符都转换为大写。
    例如,echo ${filepath^^} 打印的结果是 EXAMPLE/SUBDIR/TESTFILE.TXT。
    这个表达式的格式是 ${parameter^^pattern},把 parameter 变量值中匹配 pattern 模式的每一个小写字母都转成大写。
    如果没有提供 pattern 模式,表示匹配任意一个字符。
  • ${filepath,,}
    把 filepath 变量值的所有字符都转换为小写。
    例如,echo ${filepath,,} 打印的结果是 example/subdir/testfile.txt。
    这个表达式的格式是 ${parameter,,pattern},把 parameter 变量值中匹配 pattern 模式的每一个大写字母都转成小写。
    如果没有提供 pattern 模式,表示匹配任意一个字符。
  • ${filepath^}
    把 filepath 变量值的首字符转成大写。
    例如,echo ${filepath^} 打印的结果是 Example/subdir/testfile.txt。
    这个表达式的格式是 ${parameter^pattern},把匹配 pattern 模式的 parameter 变量值首字符转成大写。
    如果没有提供 pattern 模式,表示匹配任意单个字符。
  • ${filepath,}
    把 filepath 变量值的首字符转成小写。
    例如,echo ${filepath,} 打印的结果是 example/subdir/testfile.txt。
    这个表达式的格式是 ${parameter,pattern},把匹配 pattern 模式的 parameter 变量值首字符转成小写。
    如果没有提供 pattern 模式,表示匹配任意单个字符。

上面内容汇总说明了多个字符串变量值相关的扩展表达式,方便统一收藏查阅。

关于这些扩展表达式的详细说明、以及更多的测试例子,可以查看我前面三篇以 “Bash技巧:使用参数扩展” 开头的文章。

python带通配符的字符串匹配_Bash技巧:实例介绍数个参数扩展表达式以处理字符串变量...相关推荐

  1. 字符串转换成整数,带通配符的字符串匹配

    之前本一直想写写神经网络算法和EM算法,但写这两个算法实在需要大段大段的时间,而平时上班,周末则跑去北大教室自习看书(顺便以时间为序,说下过去半年看过的自觉还不错的数学史方面的书:<数理统计学简 ...

  2. 字符串转换成整数,通配符的字符串匹配问题

    http://blog.csdn.net/v_july_v/article/details/9024123#comments 前言 之前本一直想写写神经网络算法和EM算法,但写这两个算法实在需要大段大 ...

  3. 【Python】python通配符,使用通配符进行字符串匹配

    文章目录 1. 常用通配符 2. fnmatch模块 2.1 fnmatch函数 2.2 fnmatchcase函数 1. 常用通配符 符号 用法 * 代替零.一或多个字符 ? 代替任意一个字符 [a ...

  4. 通配符?子字符串匹配主字符串次数_突破LeetCode,拿BAT大厂offer之《正则表达式匹配》(动态规划)...

    导读:算法哥前面分享了一个<通配符匹配>,有粉丝留言,算法哥你再讲讲leetcode上另一道<正则表达式匹配>,正则表达式匹配这道题是前面通配符匹配的加强版,大家一起来学习吧! ...

  5. 字符串匹配之includes方法介绍

    字符串匹配之includes方法 字符串匹配也是我们在编程中经常遇到的一个事了,不过好在JS强大,为我们提供了includes方法,接下来我就说一下这个方法的要点. 以一个列子为基础吧,讲起来明白些: ...

  6. 通配符?子字符串匹配主字符串次数_leetcode 44 通配符匹配(c++)

    ### 题目 给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配. '?' 可以匹配任何单个字符. '*' 可以匹配任意字符串(包括空字符串). 两个字符 ...

  7. java indexof 通配符,字符串与含有通配符‘*’的字符串匹配(非正则表达式)

    顺利找到工作之后,每天勤勤恳恳的上班中... 项目需要搜索含有通配符的文件名的文件,*号表示任意多字符.这里应该只处理英文. 如此简单的要求,还是不要用正则表达式,一是简单,而是正则表达式感觉杀鸡用了 ...

  8. Python学习——常见的字符串匹配

    在处理字符串的时候,经常会有需要提取和替换的情况,记录自己常用的方法. 这个涉及正则表达式的用法,因为我是在Series的str属性在用,方法是同宗,存在略微格式的不一致. 1.替换str的中括号 S ...

  9. 程序员编程艺术第三十 三十一章 字符串转换成整数,通配符字符串匹配

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 第三十~ ...

最新文章

  1. 人人商城小程序用户授权问题
  2. 使用UltraEdit32编辑器格式化源码功能 XML、Java、C/C++、C#
  3. 最详尽的 JS 原型与原型链终极详解(1)(2)(3)===转载
  4. JACK——PaintRobot Exercise6
  5. Svn 中文语言包安装
  6. win8在安装office visio2003出现“请求的操作需要提升”,解决方法
  7. 【unity发布webgl】遇到的问题和解决办法
  8. python函数之plot函数
  9. 华为+android+root权限获取root,华为root权限怎么开启怎么获取(简单华为手机ROOT教程)...
  10. CSS-flex弹性布局补充
  11. 配置PyCharm(背景色+字体大小+解释器选择)
  12. 牛客小白月赛25 D.抽卡
  13. 软件质量之道:SourceMonitor
  14. eXtremeDB内存数据库7.0新版本的强大功能加强了它在物联网的关键作用
  15. Ag44团簇以及衍生团簇(银纳米团簇直径1-2nm)
  16. 一个Fluent动网格问题及解决方法的记录
  17. 使用JabRef在WORD中自动引用参考文献的方法
  18. 泰课unity系列黑暗之光学习笔记1
  19. 【项目分享】空虚寂寞?它可以生成小精灵陪伴你!!
  20. 太好了!什么都能查!!

热门文章

  1. 很认真地聊一下 “选择比努力更重要”
  2. .NET 5 Preview 1的深度解读和跟进
  3. BeetleX网关自定义请求日志插件
  4. .NET Core 3.0愈加成熟,微软将不再把.NET Framework API移植给它
  5. 面试必谈的哈希,.Net 程序员温故而知新
  6. KubeCon+CloudNativeCon首秀中国!
  7. 2018 上海.NET职位围观报告
  8. 【翻译】asp.net core中使用MediatR
  9. 使用Mono将C#编译运行至WebAssembly平台
  10. AspectCore中的IoC容器和依赖注入