我想从下面的字符串中只提取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