eexpress 发表于 2005-11-27 20:19:30

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

需要把eee.0.1.tar.gz这样的文件名分成2个部分。文件部分和扩展名部分。2个部分都不定长的。从tar这里分开

druggo 发表于 2005-11-29 17:26:39

用bash的匹配

eexpress 发表于 2005-11-29 21:52:28

举个例。写2句吧。

druggo 发表于 2005-11-30 20:51:12


druggo ~ # AA="aaa.tar.gz"
druggo ~ # echo ${AA%%.*}
aaa
druggo ~ # echo ${AA#*.}
tar.gz

MichaelBibby 发表于 2005-11-30 21:15:16


druggo ~ # AA="aaa.tar.gz"
druggo ~ # echo ${AA%%.*}
aaa
druggo ~ # echo ${AA#*.}
tar.gz
你试试这个:
AA="aaa-1.0.tar.gz"
就知道你的方法不行了

MichaelBibby 发表于 2005-11-30 21:24:33

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

需要把eee.0.1.tar.gz这样的文件名分成2个部分。文件部分和扩展名部分。2个部分都不定长的。从tar这里分开
我写的比较土的,没什么技巧的脚本(期待高手的巧作):

#!/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

你可以自己修改一下,让脚本从另一个文件或别的程序的输出,或读取用户的输入来做为FILENAME

druggo 发表于 2005-11-30 21:40:48


druggo ~ # AA="aaa.tar.gz"
druggo ~ # echo ${AA%%.*}
aaa
druggo ~ # echo ${AA#*.}
tar.gz
你试试这个:
AA="aaa-1.0.tar.gz"
就知道你的方法不行了

那没什么,自己扩展一下就行了

druggo ~ # AA="aaa-1.0.tar.gz"
druggo ~ # echo tar${AA##*.tar}
tar.gz
druggo ~ # echo ${AA%.tar*}
aaa-1.0


还有,如果AA="aaa-1.tar.2.tar.gz" 你的脚本就不行了。
还是bash的最大,最小匹配好用,简单方便。

MichaelBibby 发表于 2005-11-30 21:51:50

不错,你的方法好用 :-)

假設我們定義了一個變量為:
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
記憶的方法為:
# 是去掉左邊(在鑑盤上 # 在 $ 之左邊)
% 是去掉右邊(在鑑盤上 % 在 $ 之右邊)
單一符號是最小匹配﹔兩個符號是最大匹配。

druggo 发表于 2005-12-1 00:51:29

呵呵,awk也是很强的东西。

MichaelBibby 发表于 2005-12-1 11:00:43

呵呵,awk也是很强的东西。还是你的好用
以前我就看过最大最小的用法,但一直都没怎么用过,所以都是迷迷糊糊的

越简单越好,强大归强大 :)

BOoRFGOnZ 发表于 2005-12-1 12:13:24

想前辈学习 :mrgreen:

eexpress 发表于 2005-12-3 22:55:56

多谢大家了。我觉得还是 -F'.tar'最人性化了。自己以前老只知道-F'.'分,从来没想到过可以带字串。
页: [1]
查看完整版本: 如何把eee.0.1.tar.gz这样的文件名分成2个部分