zoukankan      html  css  js  c++  java
  • Shell 字符串处理、获取文件名和后缀名

     
    http://www.lichaozheng.info/2012/03/20/shell-获取文件名和后缀名/】
    代码:
    file=”thisfile.txt”
    echo “filename: ${file%.*}”
    echo “extension: ${file##*.}”
    输出:
    filename: thisfile
    extension: txt
     
     
     
    附:

    Bash字符串处理

    基于Pattern Matching的子串替换
    ${STR/$OLD/$NEW}
    替换第一个。
    ${STR//$OLD/$NEW}
    替换所有。
    注意:不能使用正则表达式,只能使用?*的Shell扩展。只能用shell通配符如 * ?  [list] [!list] [a-z]。
    ${STR/#$OLD/$NEW}
    替换开头。如果STR以OLD串开头,则替换。
    ${STR/%$OLD/$NEW}
    替换结尾。如果STR以OLD串结尾,则替换。
     
    [user@laptop ~]# STR=”Hello World” 
    [user@laptop ~]# echo ${STR/o/O} 
    HellO World
    [user@laptop ~]# echo ${STR//o/O} 
    HellO WOrld
    [user@laptop ~]# STR=”Hello World” 
    [user@laptop ~]# echo ${STR/#He/he} 
    hello World
    [user@laptop ~]# echo ${STR/#o/he} 
    Hello World
    [user@laptop ~]# echo ${STR/%He/he} 
    Hello World
    [user@laptop ~]# echo ${STR/%ld/lD} 
    Hello WorlD
     
    如果被替换串包含/字符,那么要转义,写成/。
     
    [user@laptop ~]# filename=”/user/admin/monitoring/process.sh” 
    [user@laptop ~]# echo ${filename/#/user//tmp} 
    /tmp/admin/monitoring/process.sh
    [user@laptop ~]# echo ${filename/%.*/.ksh} 
    /user/admin/monitoring/process.ksh
    [user@laptop ~]#
     
    将环境变量PATH的各个目录分开,每行显示一个。
    echo -e ${PATH/:/ }
     
    [user@laptop ctmw]# echo $PATH 
    /usr/kerberos/sbin:/usr/kerberos/bin:/usr/apache/apache-ant-1.7.1/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/user/bin
    [user@laptop ctmw]# echo -e ${PATH//:/’ ’} 
    /usr/kerberos/sbin
    /usr/kerberos/bin
    /usr/apache/apache-ant-1.7.1/bin
    /usr/local/sbin
    /usr/local/bin
    /sbin
    /bin
    /usr/sbin
    /usr/bin
    /user/bin
    [user@laptop ctmw]# echo “${PATH//:/$’ ’}” 
    /usr/kerberos/sbin
    /usr/kerberos/bin
    /usr/apache/apache-ant-1.7.1/bin
    /usr/local/sbin
    /usr/local/bin
    /sbin
    /bin
    /usr/sbin
    /usr/bin
    /user/bin
     
    基于Pattern Matching的子串删除
    子串删除是一种特殊的替换
    ${STR/$SUB}
    将STR中第一个SUB子串删除
    ${STR//$SUB}
    将STR中所有SUB子串删除
    ${STR#$PREFIX}
    去头,从开头去除最短匹配前缀
    ${STR##$PREFIX}
    去头,从开头去除最长匹配前缀
    ${STR%$SUFFIX}
    去尾,从结尾去除最短匹配后缀
    ${STR%%$SUFFIX}
    去尾,从结尾去除最长匹配后缀
    注意:经常会记错#和%的含义,有一个帮助记忆的方法
    看一下键盘,#在$之前,%在$之后,就知道#去头,%去尾。
    注意:不能使用正则表达式,只能使用?*的Shell扩展。
     
    [user@laptop ~]# STR=”Hello World” 
    [user@laptop ~]# echo ${STR#He} 
    llo World
    [user@laptop ~]# echo ${STR#He*o} 
    World
    [user@laptop ~]# echo ${STR##He*o} 
    rld
    [user@laptop ~]# PREFIX=”*o” 
    [user@laptop ~]# echo ${STR#$PREFIX} 
    World
    [user@laptop ~]# echo ${STR##$PREFIX} 
    rld
    [user@laptop ~]# echo ${STR%o*} 
    Hello W
    [user@laptop ~]# echo ${STR%%o*} 
    Hell
    [user@laptop ~]# SUFFIX=”o*” 
    [user@laptop ~]# echo ${STR%$SUFFIX} 
    Hello W
    [user@laptop ~]# echo ${STR%%$SUFFIX} 
    Hell
     
    典型应用:得到文件的扩展名
    [user@laptop ~]# FILE=hello.jpg 
    [user@laptop ~]# echo ${FILE##*.} 
    jpg
     
     
    使用sed命令实现正则表达式替换
    使用sed命令可以进行正则表达式的替换。
    echo “$STR” | sed “s/$OLD/$NEW/”
    将STR中的OLD子串替换成NEW。
     
    [user@laptop ~]# STR=”123456789″ 
    [user@laptop ~]# echo “$STR” | sed s/345/OK/ 
    12OK6789
    [user@laptop ~]# OLD=345 
    [user@laptop ~]# NEW=OK 
    [user@laptop ~]# echo “$STR” | sed “s/$OLD/$NEW/” 
    12OK6789
     
    使用tr命令实现字符集合的替换
    使用tr命令可以实现字符的替换,并且可以是从一批字符到另一批字符的替换。比如小写字母变成大写字母,或者反过来。
     
    [user@laptop ~]# echo “bash” | tr “[a-z]” “[b-z]” 
    cbti
    上面的命令是将原串中的a替换成b,被替换成c,以此类推。
     
    网上问题:Linux中 有没有一个命令可以将 字符串中出现的 +或者- 替换成对应的-或者+  即 “+” ——> “-”  “-”——>”+”  例如 GMT+8-9变成 GMT-8+9
     
    [user@laptop ~]# echo “GMT+8-9″ | sed ‘s/-/#/g’ | sed ‘s/+/-/g’ | sed ‘s/#/+/g’ 
    GMT-8+9
    上面是网上提供的答案。如果用tr来实现,更简洁些。 
    [user@laptop ~]# echo “GMT+8-9″ | tr “+-” “-+” 
    GMT-8+9
     
    路径字符串的处理
    dirname ${FULLPATH}
    取目录部分。
    basename ${FULLPATH}
    取文件名部分。
    basename ${FULLPATH} ${EXT}
    取文件名部分,并且去掉指定的扩展名。
     
    [user@laptop ~]# FULLPATH=/user/work/project/backup.tar.gz 
    [user@laptop ~]# dirname “$FULLPATH” 
    /user/work/project
    [user@laptop ~]# basename “$FULLPATH”    
    backup.tar.gz
    [user@laptop ~]# basename “$FULLPATH” .gz 
    backup.tar
    [user@laptop ~]# basename “$FULLPATH” .tar 
    backup.tar.gz
    [user@laptop ~]# basename “$FULLPATH” .tar.gz 
    backup
     
    取目录部分:${FULLPATH%/*}    
    (类似 dirname “$FULLPATH”)
    取文件名称:FILE=${FULLPATH##*/}
    (类似 basename “$FULLPATH”)
    取最短基本名称:${FILE%%.*}
    取最长基本名称:${FILE%.*}
    取最短扩展名:${FILE##*.}  或者  ${FULLPATH##*.}
    取最长扩展名:${FILE#*.}  或者  ${FULLPATH#*.}
     
    [user@laptop ~]# FULLPATH=/user/work/project/backup.tar.gz 
    [user@laptop ~]# echo ${FULLPATH%/*} 
    /user/work/project
    [user@laptop ~]# dirname “$FULLPATH” 
    /user/work/project
    [user@laptop ~]# FILE=${FULLPATH##*/} 
    [user@laptop ~]# echo $FILE 
    backup.tar.gz
    [user@laptop ~]# basename “$FULLPATH” 
    backup.tar.gz
    [user@laptop ~]# echo ${FILE%%.*} 
    backup
    [user@laptop ~]# echo ${FILE%.*} 
    backup.tar
    [user@laptop ~]# echo ${FILE##*.} 
    gz
    [user@laptop ~]# echo ${FILE#*.} 
    tar.gz
    [user@laptop ~]#
  • 相关阅读:
    JavaScript实现类的private、protected、public、static以及继承
    OSS网页上传和断点续传(STSToken篇)
    OSS网页上传和断点续传(OSS配置篇)
    Linq sum()时遇到NULL
    SQLSERVER事务日志已满 the transaction log for database 'xx' is full
    笔记本高分辨软件兼容问题,字体太小或模糊
    H5上传图片之canvas
    An error occurred while updating the entries. See the inner exception for details.
    无限级结构SQL查询所有的下级和所有的上级
    SQLserver 进程被死锁问题解决
  • 原文地址:https://www.cnblogs.com/yanwei-wang/p/8135489.html
Copyright © 2011-2022 走看看