如何从文件中删除扩展中的数字

时间:2015-06-10 11:08:49

标签: file shell rename

我在目录中有很多文件,扩展名为 .text(2) .text(1)。 我想从扩展名中删除数字,输出应该是这样的 .text .text 。 任何人都可以请帮助我的shell脚本吗? 我正在使用centOs。

3 个答案:

答案 0 :(得分:1)

一种非常便携的方式就是:

for i in *.text*; do mv "$i" "$(echo "$i" | sed 's/([0-9]\{1,\})$//')"; done

循环遍历以.text结尾的所有文件。使用sed删除包含每个文件名末尾的一个或多个数字的任何括号。

如果括号中的所有数字都是单个数字并且您正在使用bash,那么您还可以使用内置参数扩展:

for i in *.text*; do mv "$i" "${i%([0-9])}"; done

扩展会删除每个文件名末尾包含单个数字的所有括号。

答案 1 :(得分:0)

没有循环的另一种方式,也是sed(以及所有正则表达式内部)的管道到sh:

ls *text* | sed 's/\(.*\)\..*/mv  \1* \1.text/' | sh

示例:

[...]$ ls
  xxxx.text(1) yyyy.text(2)
[...]$ ls *text* | sed 's/\(.*\)\..*/mv \1* \1.text/' | sh
[...]$ ls
  xxxx.text yyyy.text

说明:

\(\)之间的所有内容都已存储,可以通过\1(或\2\3再次粘贴... ...每对括号使用)。因此,上面的代码存储了第一个点\.之前的所有字符,之后复合了这样的序列:

mv  xxxx* xxxx.text
mv  yyyy* yyyy.text

那是用管道输送的

答案 2 :(得分:0)

如果文件位于同一文件夹中,则最简单的方法

rename 's/text\([0-9]+\)/text/' *.text*  

link