我需要在文件夹中重命名PDF。有人不断向我发送不同的文件名。但是,最后的1位或2位数字是好的。它们应该是一样的。
等等。只保留最后一个号码,
我试图用正则表达式取代结果,但没有运气。当我使用sed的/ 2017 / foo /'之类的代码时,代码可以正常工作。但是我需要结果中.pdf之前的最后一个数字的模式..错误是什么,我做错了什么?
#!/bin/bash
find /home/foo/bar/ -type f -iname "NK*" -print0 | while read -d $'\0' f
do
mv "$f" "`echo $f | sed 's/.+\([0-9]{1,3}\.pdf\)/number\1/'`";
done
答案 0 :(得分:2)
将mv
命令更改为:
mv "$f" "$(echo "$f" | sed 's/.*[^0-9]\([0-9]\{1,3\}\.pdf\)/number\1/')"
基本正则表达式不支持以下内容:
.+
(使用.*
代替){m,n}
(使用\{m,n\}
代替)答案 1 :(得分:0)
您的回答的问题是您错过了$
变量,并且正在逃避正则表达式中需要的括号。
#!/bin/bash
find /home/foo/bar/ -type f -iname "NK*" -print0 | while read -d $'\0' f
do
mv "$f" "`echo $f | sed 's/.* ([0-9]{1,3}).pdf/number$1.pdf/'`";
done
未转义的括号允许您以变量形式访问组。第一组是$1
,它从那里开始增加。