我的文本/文件名看起来像这样:
['11'].pdf
['2807'].pdf
['511'].pdf
['445'].pdf 我想要括号内的数字(没有撇号),并将文件重命名为例如445.pdf。
我目前使用:
rename 's/(\[0-9].*pdf).*/$1/' *但这不会改变任何内容;文件的名称是原来的名称。
发布于 2021-05-25 09:33:39
一些试验和错误导致了这个正则表达式:rename "s/\[\'([0-9]+)\'\]/\1/" *.pdf
我不清楚是什么原因,但是如果使用$1,正则表达式就会失败,如果使用\1,正则表达式就会成功--尽管当我运行它时,perl告诉我并非如此。
发布于 2021-05-25 09:49:29
这没有回答正则表达式的问题,但这里有另一个观点。
正则表达式讨论起来有点棘手。不同的正则表达式定义几乎和实现一样多。根据您的rename程序是用什么语言编写的,某人给您的正则表达式可能对您和他们的工作方式有所不同。在谈论您正在使用的regex实现时,您必须非常具体。
如果你只是想实际地做一堆重命名,那么完全避免使用正则表达式,只使用shell表达式:
for current in "["*.pdf; do
new=${current##??} # removes the ['
new=${new%?].pdf} # removes the '].pdf
echo mv "$current" "$new.pdf"
done(删除echo才能真正做到这一点。)
https://stackoverflow.com/questions/67680276
复制相似问题