QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1587|回复: 11

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

[复制链接]
发表于 2005-11-27 20:19:30 | 显示全部楼层 |阅读模式
需要把eee.0.1.tar.gz这样的文件名分成2个部分。文件部分和扩展名部分。2个部分都不定长的。从tar这里分开
发表于 2005-11-29 17:26:39 | 显示全部楼层
用bash的匹配
回复

使用道具 举报

 楼主| 发表于 2005-11-29 21:52:28 | 显示全部楼层
举个例。写2句吧。
回复

使用道具 举报

发表于 2005-11-30 20:51:12 | 显示全部楼层
[code:1]
druggo ~ # AA="aaa.tar.gz"
druggo ~ # echo ${AA%%.*}
aaa
druggo ~ # echo ${AA#*.}
tar.gz
[/code:1]
回复

使用道具 举报

发表于 2005-11-30 21:15:16 | 显示全部楼层
[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"
就知道你的方法不行了
回复

使用道具 举报

发表于 2005-11-30 21:24:33 | 显示全部楼层

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

[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
回复

使用道具 举报

发表于 2005-11-30 21:40:48 | 显示全部楼层
[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的最大,最小匹配好用,简单方便。
回复

使用道具 举报

发表于 2005-11-30 21:51:50 | 显示全部楼层
不错,你的方法好用 :-)
[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]
回复

使用道具 举报

发表于 2005-12-1 00:51:29 | 显示全部楼层
呵呵,awk也是很强的东西。
回复

使用道具 举报

发表于 2005-12-1 11:00:43 | 显示全部楼层
[quote:19612efbf2="druggo"]呵呵,awk也是很强的东西。[/quote]还是你的好用
以前我就看过最大最小的用法,但一直都没怎么用过,所以都是迷迷糊糊的

越简单越好,强大归强大
回复

使用道具 举报

发表于 2005-12-1 12:13:24 | 显示全部楼层
想前辈学习
回复

使用道具 举报

 楼主| 发表于 2005-12-3 22:55:56 | 显示全部楼层
多谢大家了。我觉得还是 -F'.tar'最人性化了。自己以前老只知道-F'.'分,从来没想到过可以带字串。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 14:28 , Processed in 0.045918 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表