我只想tar.gz
从以下字符串中提取。
/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
从以下字符串中提取。
/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
一个变量。
这很棘手,因为您不希望版本号匹配。我们需要的不仅仅是普通的通配符。我们可以使用 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
:
$ 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
$ f='/root/abc/xzy/file_tar_src-5.2.8.23.tar.gz'
$ [[ $f =~ [^.]+\.[^.]+$ ]] && echo ${BASH_REMATCH[0]}
tar.gz
另一个关于:
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}"
不确定您在寻找什么。您是否尝试确定文件是否以 结尾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
plain 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'"