shell 提取檔名和目錄名

2021-08-21 06:51:20 字數 1652 閱讀 6209

在寫shell指令碼中,經常會有需要對路徑和檔名做處理。有時候犯不著用sed命令來操作。bash提供的變數操作和一些外部命令都能很好的處理。

$ var=/dir1/dir2/file.txt

$ echo $

file.txt

在shell指令碼中,可以使用變數來儲存這個結果,再加以利用,如file=$

我們將"/" 換成"." 

$ var=/dir1/dir2/file.txt

$ echo $

txt

這樣就能提取到檔案字尾了。

如果檔案的字尾不僅有乙個,例如,file.tar.gz,命令$僅能提取最後乙個字尾,而我想提取tar.gz時該怎麼辦?那麼就要用下面所說的$命令了。

$ var=/dir1/dir2/file.tar.gz

$ echo $

tar.gz

該方式是從右開始第一次匹配到字元"/",然後截掉右邊內容(包括字元"/"),返回餘下左側部分。

$ var=/dir1/dir2/file.txt

$ echo $

/dir1/dir2

$該方式是從右開始最大化匹配到字元".",然後截掉右邊內容(包括字元"."),返回餘下左側部分。這裡就不舉例說明了。

方法一總結

bash提供的變數操作方法很多,不過這四個對於字串擷取基本夠用了。

有乙個方便記憶的方法,我們看鍵盤,"#"在"%"的左邊,當使用#的時候,就說明截掉左邊的內容,反之%就是從右邊開始截掉。而##和%%就是最大化的截掉。

*:表示要刪除的內容,另外還需要乙個字元表示戒掉點。

例如:$表示找出從右側開始最大化的查詢到字元"x",並刪除字元x及其右邊的字元。

basename和dirname命令是專門用來擷取檔名和路徑名的。

1、basename

該命令的作用提取檔名,使用方法為basename name [suffix]。

1)從路徑中提出出檔名(帶字尾),例子如下:

$ var=/dir1/dir2/file.txt

$ echo $(basename $)

file.txt

2)從上面命令的用法中可以看到,字尾(suffix)是乙個可選項。所以,若只想提取出檔名file,而不帶有字尾,還可以在變數的後面加上字尾名,例子如下:

$ var=/dir1/dir2/file.txt

$ echo $(basename $ .txt)

file

dirname

$ var=/dir1/dir2/file.txt

$ echo $(dirname $)

/dir1/dir2

$ var=/dir1/dir2/

$ echo $(dirname $)

/dir1

shell提取檔名和目錄名

用於字串的讀取,提取和替換功能,可以使用 提取字串1.提取檔名 root localhost test var mnt aaa test test.txt root localhost test echo test.txt2.提取字尾 root localhost test echo txt3.提取...

Linux shell 提取檔名和目錄名

用於字串的讀取,提取和替換功能,可以使用 提取字串 1 提取檔名 root localhost log var dir1 dir2 file.txt root localhost log echo file.txt 2 提取字尾 root localhost log echo txt3 提取不帶字尾...

shell獲取檔名和目錄名

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