• shell编程--切分文件名


      引:有时候我们会碰到这这样的需求,需要从文件名xxx.yyy中切分出名称xxx和扩展名yyy。这些可以利用“%” “%%”  “#”  “##”操作符来完成。

    一. “%” 操作符:

    1. 例子:

    例1

    例2

    2.解释:

          例1:file变量的值为“sample.jpg”。 file%.*  意思是从file变量(例子中是sample.jpg)的右边开始匹配,直到遇到第一个匹配 .* 的字符串(例子中是.jpg),然后将其删掉 。所以变量name的值就是sample了。

         例2:如果file变量的值为"sample.jpg.txt",那么file%.* 只会删除 .txt ,name会是sample.jpg。也即%操作符是非贪婪的。遇到第一个匹配后就会停止。

    3. 注意:

    •       % 后面的并不是正则表达式,* 匹配任意长的字符,? 匹配一个字符。如1?2 可以匹配132和1a2;a* 可以匹配任意以a开头的字符串。
    •    匹配是从最后一个字符,从右向左匹配的。file%.*m (变量file值为sample.jpg)不会删掉任何字符。因为变量的最后一个字符是 g,永远也不会有匹配 .*m 的字符串。 

    二. "%%" 操作符:

    1. 例子:

    2. 解释:

          “%%” 与 “%” 的区别就是'%%'是贪婪的,意味着它会匹配符合条件的最长字符串。所以在例子中,file%%.* 会从右边开始匹配,最长的匹配是.jpg.txt,然后将其删除。所以变量name的值为sample。

    三. "#"操作符

    1. 例子:

    例1

    例2

    2. 解释:

      例1:file#*. 是从右向左执行非贪婪匹配。找到第一个匹配 *. 的字符串(例子中是"sample."),然后将其删除。于是变量ext就是 “jpg” 了。

      例2:说明了#的匹配是非贪婪的,找到第一个匹配了就会停止。

    四. "##"操作符

    1. 例子:

    2. 解释:

      与"%%" 类似,“##” 是 “#” 的贪婪模式,也即会从右向左匹配符合条件的最长字符串。所以例子中将会删除“sample.jpg.txt"中的”sample.jgp.“。

  • 相关阅读:
    CAN总线学习资料
    VMware虚拟机 硬盘空间不足 磁盘大小调整方案
    郭天祥-S3C2440开发板Linux2.6.31移植教程
    MFC串口编程——使用标准SerialCom类
    Luogu P2602 [ZJOI2010]数字计数 //数位DP
    luogu P1896 [SCOI2005] 互不侵犯 //状压DP
    中北大学ACM 5/12 T6 CSY的幸福
    P2473 || SCOI2008 奖励关 //状压&&期望DP
    请让蝴蝶爬满全身
    【图论】二分图 // 未完成 =、=
  • 原文地址:https://www.cnblogs.com/blues-harp/p/4049236.html
Copyright © 2020-2023  润新知