LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1413|回复: 10

[求助]去文件名后缀

[复制链接]
发表于 2006-3-14 21:19:17 | 显示全部楼层 |阅读模式
编写一个程序unsuffix,从第1个参数所给定的文件名的后部去掉第2个参数包含的字符串,即:
unsuffix a.b .b
应该将文件a.b更名为a

我写的程序如下:
mv "$1" $(echo "$1" | sed "s/$2$//")

这个程序可以用,但sed将$2中的“.”解释为通配符了
在unsuffix acb .b
时也会将acb改名为a

怎么才能使得它完全匹配而不将“.”解释为通配符啊
发表于 2006-3-14 21:23:14 | 显示全部楼层
\.
可以不?
回复 支持 反对

使用道具 举报

发表于 2006-3-14 21:27:45 | 显示全部楼层
这种程序用mv实现会有很多问题
特别是当文件名中出现空格时
rename 很方便
  1. [0 No.719 tmp $ ] touch 1.a 2.b 3.c 4.c
  2. [0 No.720 tmp $ ] ls
  3. 1.a  2.b  3.c  4.c
  4. [0 No.721 tmp $ ] rename 's/\..*//' *
  5. [0 No.722 tmp $ ] ls
  6. 1  2  3  4
  7. [0 No.723 tmp $ ]
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-14 21:29:53 | 显示全部楼层
Post by 终极幻想
\.
可以不?

“.”是作为第二个参数的一部分传给unsuffix的
而且第二个参数也不一定就包含“.”的
我只是想让unsuffix这个程序在第二个参数包含“.”时也能正常工作
回复 支持 反对

使用道具 举报

发表于 2006-3-14 21:32:14 | 显示全部楼层
basename a.b .b
a
回复 支持 反对

使用道具 举报

发表于 2006-3-14 22:56:58 | 显示全部楼层
Post by seamonkey
basename a.b .b
a


脑子进水了,这都忘记了。。。。。郁闷。。。。
回复 支持 反对

使用道具 举报

发表于 2006-3-15 08:56:26 | 显示全部楼层
Post by 终极幻想
脑子进水了,这都忘记了。。。。。郁闷。。。。


呵呵,小弟也不知道这个用法,又学了一招

就针对楼主的程序,try this



  1. mv "$1" $(echo "$1" | sed "s/\\$2$//")

复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-15 08:59:17 | 显示全部楼层
Post by seamonkey
basename a.b .b
a

谢谢,bash真是博大精深啊
回复 支持 反对

使用道具 举报

发表于 2006-3-15 09:55:11 | 显示全部楼层
BASH有很强大的字符串处理功能
[PHP]#!/bin/bash
mv $1 ${1/%$2/}[/PHP]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-15 10:23:29 | 显示全部楼层
Post by johnny_jiang
呵呵,小弟也不知道这个用法,又学了一招

就针对楼主的程序,try this



  1. mv "$1" $(echo "$1" | sed "s/\\$2$//")

复制代码

用这个的话就是假定$2第一个字符一定是“.”了,这样如果$2第一个字符不是“.”或者根本就没有“.”就不行了,呵呵
回复 支持 反对

使用道具 举报

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

本版积分规则

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