正则表达式使用重命名linux命令重命名文件名

时间:2019-01-17 20:28:40

标签: regex rename

我正在尝试将文件first_second.pdf重命名为first_0second.pdf

因此,我阅读了有关捕获和反向引用的信息。但不知何故,它不起作用。谁能告诉我我在做什么错?

rename 's/\(.*_\)\([1-9]\).pdf$/$10$2.pdf/' first_1.pdf

我希望将first_1.pdf重命名为first_01.pdf

2 个答案:

答案 0 :(得分:1)

-n参数向您展示了在不实际进行测试的情况下将要执行的操作,这对测试非常有用。 匹配并捕获包括下划线在内的第一部分。然后匹配并捕获1个或多个数字,后跟文字点和其他任何字符,直到该行的末尾。替换为第一个捕获的组(将组号与文字“ 0”分开,用大括号括起来),文字“ 0”,然后替换为其余的两个捕获组。

rename -n 's/(.*_)([0-9]+)(\..*)$/${1}0$2$3/' first_1.pdf

rename(first_1.pdf, first_01.pdf)

答案 1 :(得分:0)

问题在于转义字符和大括号包围了后面的引用。这是因为重命名在内部使用posix扩展。如果重命名使用posix-basic作为正则表达式,则必须使用转义符。

通过删除转义符并为后面的引用添加大括号,regex表达式起作用了。

parallel -j 8 --colsep ' ' 'CUDA_VISIBLE_DEVICES=$(({%} - 1)) {}' < commands.txt