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

2021-07-16 10:26:28 字數 4794 閱讀 3356

**:

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 ~]#

Shell 獲取檔名和字尾名

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

shell獲取檔名和目錄名

憬薇15940人閱讀 2018 08 23 21 23 31 對檔名或目錄名進行處理,通常的操作是由路徑中提取出檔名,從路徑中提取出目錄名,提取檔案字尾名等等。例如,從路徑 dir1 dir2 file.txt中提取也檔名file.txt,提取出目錄 dir1 dir2,提取出檔案字尾txt等。下面...

批處理通過字串擷取得到檔名

當有乙個完整的檔案路徑時,如何擷取檔名呢,可以使用echo命令。如下 echo off set a e program files image line fl studio 9 fl.exe set b e program files image line fl studio 9 plugins v...