我想從下面的字符串中只提取tar.gz
。如何在shell腳本的文件中單獨獲取擴展名?
/root/abc/xzy/file_tar_src-5.2.8.23.tar.gz
或
/root/abc/xyz/file_tar_src-5.2.tar.gz
或
/root/abc/xyz/file_tar_src-5.tar.gz
了所有這些字符串(還有更多),我只需要tar.gz
我如何提取他們不關心點的數量他們。我需要將tar.gz
放入一個變量中。
我想從下面的字符串中只提取tar.gz
。如何在shell腳本的文件中單獨獲取擴展名?
/root/abc/xzy/file_tar_src-5.2.8.23.tar.gz
或
/root/abc/xyz/file_tar_src-5.2.tar.gz
或
/root/abc/xyz/file_tar_src-5.tar.gz
了所有這些字符串(還有更多),我只需要tar.gz
我如何提取他們不關心點的數量他們。我需要將tar.gz
放入一個變量中。
我真的不明白,爲什麼你只需要tar.gz
:
$ x=/root/abc/xyz/file_tar_src-5.tar.gz
$ y=${x##*[0-9].}
$ echo $y
tar.gz
或者:
$ x=/root/abc/xyz/file_tar_src-5.tar.gz
$ y=`echo $x | grep -o 'tar\.gz$'`
$ echo $y
tar.gz
這隻適用於文件名以數字結尾的情況。 – 2012-04-04 01:23:23
這很棘手,因爲您不希望版本號匹配。我們需要比普通通配符更多的權力。我們可以使用bash的內置=~
正則表達式來完成工作。
$ filename='/root/abc/xzy/file_tar_src-5.2.8.23.tar.gz'
$ [[ $filename =~ \.([^0-9]*)$ ]]
$ ext=${BASH_REMATCH[1]}
$ echo "$ext"
tar.gz
不知道你尋找什麼。您是否試圖確定文件是否以tar.gz
結尾?
if [[ $filename == *.tar.gz ]]
then
echo "$filename is a gzipped compressed tar archive"
else
echo "No, it's not"
fi
你試圖找到後綴是否是tar.gz
,tar.bz2
或只是簡單的tar
?
$suffix=${file##*.tar}
if [[ "$suffix" = "$file" ]]
then
echo "Not a tar archive!"
else
suffix="tar.$suffix"
echo "Suffix is '$suffix'"
fi
你的後綴有興趣,但如果它是一個tar.gz,你要考慮的是,後綴:
filename='/root/abc/xzy/file_tar_src-5.2.8.23.tar.gz'
suffix=${filename##*.} #This will be gz or whatever the suffix
rest_of_file=${filename%%.$suffix} #This is '/root/abc/xzy/file_tar_src-5.2.8.23.tar'
# See if the rest of file has a tar suffix.
# If it does, prepend it to the current suffix
[[ $rest_of_file == *.tar ]] && suffix="tar.$suffix"
echo "The file suffix is '$suffix'"
粉粉:
pathname="/root/abc/xzy/file_tar_src-5.2.8.23.tar.gz"
IFS='.' # field separator
declare -a part=(${pathname}) # split into an array
ext2="${part[*]: -2}" # use the last 2 elements
echo -e "${ext2}"
$ f='/root/abc/xzy/file_tar_src-5.2.8.23.tar.gz'
$ [[ $f =~ [^.]+\.[^.]+$ ]] && echo ${BASH_REMATCH[0]}
tar.gz
什麼如果文件名結束'.tar.bz2',會發生什麼?你還想要'tar.gz'還是你想要'.tar.bz2'?如果您只使用'tar.gz',則不需要獲取擴展名;你知道它是'tar.gz'。 'file.c'會發生什麼?擴展名是'.c'還是'file.c',或者它是無效的,因爲名稱中只有一個點?你有沒有需要前綴,非擴展?或者你的意思是'除了後面的'tar.gz'之外的所有東西嗎?你想要終端點嗎? – 2012-04-04 01:05:47