如何把eee.0.1.tar.gz这样的文件名分成2个部分

如何把eee.0.1.tar.gz这样的文件名分成2个部分

需要把eee.0.1.tar.gz这样的文件名分成2个部分。文件部分和扩展名部分。2个部分都不定长的。从tar这里分开
用bash的匹配
举个例。写2句吧。
[code:1]
druggo ~ # AA="aaa.tar.gz"
druggo ~ # echo ${AA%%.*}
aaa
druggo ~ # echo ${AA#*.}
tar.gz
[/code:1]
[quote:7f99b65728="druggo"][code:1]
druggo ~ # AA="aaa.tar.gz"
druggo ~ # echo ${AA%%.*}
aaa
druggo ~ # echo ${AA#*.}
tar.gz
[/code:1][/quote]你试试这个:
AA="aaa-1.0.tar.gz"
就知道你的方法不行了
[quote:07387a01dc="eexpress"]需要把eee.0.1.tar.gz这样的文件名分成2个部分。文件部分和扩展名部分。2个部分都不定长的。从tar这里分开[/quote]
我写的比较土的,没什么技巧的脚本(期待高手的巧作):
[code:1]
#!/usr/local/bin/bash

FILENAME='eee-0.1.tar.gz'

file=$(echo $FILENAME | awk -F'.tar' '{print $1}' )
suffix=$(echo $FILENAME | awk -F"${file}." '{print $2}' )

echo $file $suffix
[/code:1]
你可以自己修改一下,让脚本从另一个文件或别的程序的输出,或读取用户的输入来做为FILENAME
[quote:7943cd9811="MichaelBibby"][quote:7943cd9811="druggo"][code:1]
druggo ~ # AA="aaa.tar.gz"
druggo ~ # echo ${AA%%.*}
aaa
druggo ~ # echo ${AA#*.}
tar.gz
[/code:1][/quote]你试试这个:
AA="aaa-1.0.tar.gz"
就知道你的方法不行了[/quote]

那没什么,自己扩展一下就行了
[code:1]
druggo ~ # AA="aaa-1.0.tar.gz"
druggo ~ # echo tar${AA##*.tar}
tar.gz
druggo ~ # echo ${AA%.tar*}
aaa-1.0
[/code:1]

还有,如果AA="aaa-1.tar.2.tar.gz" 你的脚本就不行了。
还是bash的最大,最小匹配好用,简单方便。
不错,你的方法好用 :-)
[code:1]
假設我們定義了一個變量為:
file=/dir1/dir2/dir3/my.file.txt
我們可以用 ${ } 分別替換獲得不同的值:
${file#*/}:拿掉第一條 / 及其左邊的字串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最後一條 / 及其左邊的字串:my.file.txt
${file#*.}:拿掉第一個 . 及其左邊的字串:file.txt
${file##*.}:拿掉最後一個 . 及其左邊的字串:txt
${file%/*}:拿掉最後條 / 及其右邊的字串:/dir1/dir2/dir3
${file%%/*}:拿掉第一條 / 及其右邊的字串:(空值)
${file%.*}:拿掉最後一個 . 及其右邊的字串:/dir1/dir2/dir3/my.file
${file%%.*}:拿掉第一個 . 及其右邊的字串:/dir1/dir2/dir3/my
記憶的方法為:
# 是去掉左邊(在鑑盤上 # 在 $ 之左邊)
% 是去掉右邊(在鑑盤上 % 在 $ 之右邊)
單一符號是最小匹配﹔兩個符號是最大匹配。[/code:1]
呵呵,awk也是很强的东西。
[quote:19612efbf2="druggo"]呵呵,awk也是很强的东西。[/quote]还是你的好用
以前我就看过最大最小的用法,但一直都没怎么用过,所以都是迷迷糊糊的

越简单越好,强大归强大