我想从以下字符串中仅提取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
。
答案 0 :(得分:1)
这很棘手,因为您不希望版本号匹配。我们需要更多的力量而不仅仅是简单的通配符。我们可以使用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
答案 1 :(得分:1)
我真的不明白你为什么只需要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
答案 2 :(得分:1)
$ f='/root/abc/xzy/file_tar_src-5.2.8.23.tar.gz'
$ [[ $f =~ [^.]+\.[^.]+$ ]] && echo ${BASH_REMATCH[0]}
tar.gz
答案 3 :(得分:0)
不确定您正在寻找什么。您是否尝试确定文件是否以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'"
答案 4 :(得分:0)
另一个:
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}"