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