zoukankan      html  css  js  c++  java
  • 切分文件名提取文件扩展名或提取文件名

    有些脚本要根据文件名进行各种处理,有时候需要保留文件名抛弃文件后缀,也有时候需要文件后缀不要文件名,这类提取文件部分的操作使用shell的内建功能就能实现。需要用到的几个操作符有:%%%###

    从右向左匹配 :% 和 %% 操作符的示例

    #!/bin/bash
    #提取文件名,删除后缀。
    
    file_name="text.gif"
    name=${file_name%.*}
    echo file name is: $name
    
    输出结果:
    file name is: test
    

    # ${VAR%.* }含义:从$VAR中删除位于 % 右侧的通配符左右匹配的字符串,通配符从右向左进行匹配。

    现在给变量 name 赋值,name=text.gif,那么通配符从右向左就会匹配到 .gif,所有从 $VAR 中删除匹配结果。

    # % 属于非贪婪操作符,他是从左右向左匹配最短结果;%% 属于贪婪操作符,会从右向左匹配符合条件的最长字符串。

    file_name="text.gif.bak.2012"
    name=${file_name%.*}
    name2=${file_name%%.*}
    echo file name is: $name
    echo file name is: $name2
    输出结果:
    file name is: test.gif.bak
    //使用 % file name is: test
    //使用 %% 操作符 %%
    使用 .* 从右向左贪婪匹配到 .gif.bak.2012
    

      

    从左向右匹配:# 和 ## 操作符示例

    #!/bin/bash
    #提取后缀,删除文件名。
    
    file_name="text.gif"
    suffix=${file_name#*.}
    echo suffix is: $suffix
    
    输出结果:
    suffix is: gif
    # ${VAR#*.} 含义:从 $VAR 中删除位于 # 右侧的通配符所匹配的字符串,通配符是左向右进行匹配。 
    # 跟 % 一样,# 也有贪婪操作符 ## 。
    file_name="text.gif.bak.2012.txt" 
    suffix=${file_name#*.} 
    suffix2=${file_name##*.} 
    echo suffix is: $suffix 
    echo suffix is: $suffix2 
    输出结果: 
    suffix is: text.gif.bak.2012 
    //使用 # suffix2 is: txt 
    //使用 ## 操作符 ## 
    使用 *. 从左向右贪婪匹配到 text.gif.bak.2012

    示例2,定义变量 url="www.1987.name"

    echo ${url%.*}      #移除 .* 所匹配的最右边的内容。
    www.1987
    echo ${url%%.*}     #将从右边开始一直匹配到最左边的 *. 移除,贪婪操作符。
    www
    echo ${url#*.}      #移除 *. 所有匹配的最左边的内容。
    1987.name
    echo ${url##*.}     #将从左边开始一直匹配到最右边的 *. 移除,贪婪操作符。
    name
    

      

  • 相关阅读:
    kolla多节点部署openstack
    归并排序
    gitlab ci/cd
    微信、支付宝个人收款码不能用于经营收款 z
    微信小程序弹出和隐藏遮罩层动画以及五星评分
    centos7 安装 nginx
    netty+websocket模式下token身份验证遇到的问题
    windows 截图 win+shift+s
    linux下 "chmod 777" 中777这个数字是怎么出来的
    nginx四层转发,访问内网mysql数据库
  • 原文地址:https://www.cnblogs.com/xzlive/p/9486685.html
Copyright © 2011-2022 走看看