2016-11-23 34 views
1

在shell腳本我有一個變量$FILE_LINK,其中包含以下字符串:如何從linux中的http鏈接獲取文件名?

http://links.twibright.com/download/links-2.13.tar.gz 

什麼,我需要的是讓從鏈接文件名,並將其存儲在不同的變量,所以這個過程會看與此類似:

  1. 設置可變$FILE_LINK
  2. 獲取後最後一個 「/」,在這種情況下, '鏈接-2.13.tar.gz'
  3. 最後一個字符串
  4. 存儲在一個變量$FILE_LINK_NAME

我怎麼能做到這一點的字符串?

+0

如果使用BASH使用:'FILE_LINK_NAME = 「$ {FILE_LINK ## * /}」' – anubhava

+0

我想,如果你這樣做搜索SO,你可以找到至少5種不同的方式來做到這一點。 – Kent

回答

2

如果使用BASH使用:

file_link='http://links.twibright.com/download/links-2.13.tar.gz' 
file_link_name="${file_link##*/}" 

links-2.13.tar.gz 

或者使用basename(不適用於OSX):

file_link_name=$(basename "$file_link") 

如果不使用此awk

file_link_name=$(awk -F/'{print $NF}' <<< "$file_link") 

或者使用sed

file_link_name=$(sed 's~.*/~~' <<< "$file_link") 

PS:爲了避免與ENV變量發生衝突,我避開了所有大寫變量名。

+1

也可以添加'basename「$ file_link」':) – Sundeep

+1

當然:)我一直忘記'basename'因爲我在OSX上。 – anubhava

+0

什麼意思'basename'在OSX上不可用? – mouviciel

1
LINK=http://links.twibright.com/download/links-2.13.tar.gz 
FILE=`echo $LINK | awk -F "/" '{print $NF}'` 
echo $FILE 

輸出爲links-2.13.tar.gz


AWK是文本處理的好工具。

https://en.wikipedia.org/wiki/AWK

-F設置分隔符

$NF意味着最後一列