Shell 獲取檔名和字尾名

2021-06-22 11:27:55 字數 4794 閱讀 3597

**:

file=」thisfile.txt」

echo 「filename: $」

echo 「extension: $」

輸出:filename: thisfile

extension: txt 附:

基於pattern matching的子串替換 $

替換第乙個。 $

替換所有。

注意:不能使用正規表示式,只能使用?*的shell擴充套件。只能用shell萬用字元如 * ?  [list] [!list] [a-z]。 $

替換開頭。如果str以old串開頭,則替換。 $

替換結尾。如果str以old串結尾,則替換。

[user@laptop ~]# str=」hello world」 

[user@laptop ~]# echo $ 

hello world

[user@laptop ~]# echo $ 

hello world

[user@laptop ~]# str=」hello world」 

[user@laptop ~]# echo $ 

hello world

[user@laptop ~]# echo $ 

hello world

[user@laptop ~]# echo $ 

hello world

[user@laptop ~]# echo $ 

hello world

如果被替換串包含/字元,那麼要轉義,寫成\/。

[user@laptop ~]# filename=」/user/admin/monitoring/process.sh」 

[user@laptop ~]# echo $ 

/tmp/admin/monitoring/process.sh

[user@laptop ~]# echo $ 

/user/admin/monitoring/process.ksh

[user@laptop ~]#

將環境變數path的各個目錄分開,每行顯示乙個。

echo -e $

[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 $ 

/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 「$」 

/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子串刪除 $

去頭,從開頭去除最短匹配字首 $

去頭,從開頭去除最長匹配字首 $

去尾,從結尾去除最短匹配字尾 $

去尾,從結尾去除最長匹配字尾

注意:經常會記錯#和%的含義,有乙個幫助記憶的方法

看一下鍵盤,#在$之前,%在$之後,就知道#去頭,%去尾。

注意:不能使用正規表示式,只能使用?*的shell擴充套件。

[user@laptop ~]# str=」hello world」 

[user@laptop ~]# echo $ 

llo world

[user@laptop ~]# echo $ 

world

[user@laptop ~]# echo $ 

rld[user@laptop ~]# prefix=」*o」 

[user@laptop ~]# echo $ 

world

[user@laptop ~]# echo $ 

rld[user@laptop ~]# echo $ 

hello w

[user@laptop ~]# echo $ 

hell

[user@laptop ~]# suffix=」o*」 

[user@laptop ~]# echo $ 

hello w

[user@laptop ~]# echo $ 

hell

典型應用:得到檔案的副檔名

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 $

取目錄部分。

basename $

取檔名部分。

basename $ $

取檔名部分,並且去掉指定的副檔名。

[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

取目錄部分:$    

(類似 dirname 「$fullpath」)

取檔名稱:file=$

(類似 basename 「$fullpath」)

取最短基本名稱:$

取最長基本名稱:$

取最短副檔名:$  或者  $

取最長副檔名:$  或者  $

[user@laptop ~]# fullpath=/user/work/project/backup.tar.gz 

[user@laptop ~]# echo $ 

/user/work/project

[user@laptop ~]# dirname 「$fullpath」 

/user/work/project

[user@laptop ~]# file=$ 

[user@laptop ~]# echo $file 

backup.tar.gz

[user@laptop ~]# basename 「$fullpath」 

backup.tar.gz

[user@laptop ~]# echo $ 

backup

[user@laptop ~]# echo $ 

backup.tar

[user@laptop ~]# echo $  gz

[user@laptop ~]# echo $ 

tar.gz

[user@laptop ~]#

檔名(字尾名)修改

就自己寫了段 來實現 檔名 字尾名 修改的小函式。剛開通部落格就把 放上來了。希望大俠看到指點一二。不勝榮幸!view code 1 2 修改檔名 3 4 原始檔全名 包括路徑 5 檔案字尾名 為空表示不修改 6 檔案後 為空表示不修改 7 返回異常訊息 8static void changeext...

Shell 字串處理 獲取檔名和字尾名

file thisfile.txt echo filename echo extension 輸出 filename thisfile extension txt 附 基於pattern matching的子串替換 替換第乙個。替換所有。注意 不能使用正規表示式,只能使用?的shell擴充套件。只能...

Python 獲取檔案的檔名和字尾名(副檔名)

我們可以使用os.path.splitext file 0 獲得檔名。我們可以使用os.path.splitext file 1 獲得以.為開頭的檔案字尾名。接下來我們看乙個例子 import os file hello world.py 獲取字首 檔名稱 print os.path.splitex...