• 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.“。

  • 相关阅读:
    合唱队形2 洛谷U5874
    AC日记——石子归并 codevs 1048
    AC日记——舒适的路线 codevs 1001 (并查集+乱搞)
    AC日记——导弹拦截 洛谷 P1020 (dp+模拟)
    常见模板(欧拉筛素数,最小生成树,快排,并查集,单源最短路)
    AC日记——信息传递 洛谷 P2661 (tarjan求环)
    AC日记——逃出克隆岛 (bfs)
    数字对 (长乐一中模拟赛day2T2)
    改造二叉树 (长乐一中模拟赛day2T1)
    AC日记——热浪 codevs 1557 (最短路模板题)
  • 原文地址:https://www.cnblogs.com/blues-harp/p/4049236.html
Copyright © 2020-2023  润新知