-1

以下の文字列からのみ抽出したいと思い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を変数に入れる必要があります。

4

5 に答える 5

1
$ f='/root/abc/xzy/file_tar_src-5.2.8.23.tar.gz'
$ [[ $f =~ [^.]+\.[^.]+$ ]] && echo ${BASH_REMATCH[0]}
tar.gz
于 2012-04-04T12:59:03.373 に答える
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
于 2012-04-04T01:11:27.053 に答える
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
于 2012-04-04T01:13:06.163 に答える
0

何を探しているのか正確にはわかりません。ファイルがで終わるかどうかを判断しようとしていますtar.gzか?

if [[ $filename == *.tar.gz ]]
then
     echo "$filename is a gzipped compressed tar archive"
else
     echo "No, it's not"
fi

接尾辞を見つけようとしていますかtar.gztar.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'"
于 2012-04-04T04:12:30.227 に答える
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}"
于 2012-04-04T10:02:12.673 に答える