Shell 字串處理、擷取檔案名稱和尾碼名

來源:互聯網
上載者:User
【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} 替換所有。 注意:不能使用Regex,只能使用?*的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/:/\n}   [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//:/’\n’}  /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//:/$’\n’}”  /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} 去尾,從結尾去除最長相符尾碼 注意:經常會記錯#和%的含義,有一個協助記憶的方法 看一下鍵盤,#在$之前,%在$之後,就知道#去頭,%去尾。 注意:不能使用Regex,只能使用?*的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命令實現Regex替換 使用sed命令可以進行Regex的替換。 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 ~]#
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.