使用正则表达式

时间:2018-11-26 17:09:22

标签: regex linux bash unix rename

我正在尝试为以I0 [0-9] [0-9]-开头的文件名找到正确的正则表达式,例如:“ I097-”。我不熟悉正则表达式,但是在网上使用时,我想到了这个[I] [0] [\ d] [\ d] [-],我确定这不是我拥有的字符串的最佳正则表达式模式,但是我使用在线正则表达式工具进行了测试,并且可以正常工作。现在,我想使用Linux'find'查找所有与此正则表达式匹配的文件,并通过将匹配字符串替换为空来重命名结果文件。

From:
I071-PTEN-7
./I071-PTEN-7/I071-PTEN-7.txt

To:
PTEN-7
./PTEN-7/PTEN-7.txt

command used:
find . -name "I0*" -type f -o -name "I0*" -type d -exec rename -n "s/[I][0][\d][\d][-]/''/" {} \;

但是它似乎什么也没做,不确定发生了什么。任何发现问题或解决方案的帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:2)

使用-execdir选项仅获取find中的文件名条目,也无需在正则表达式中的每个字符周围使用字符类。

find . -name 'I0*' -execdir rename -n 's/^I0\d\d-//' {} \;

如果rename不起作用,则可以尝试以下操作:

find . -type f -name 'I0*' -execdir bash -c 'mv "$1" "${1/I0[0-9][0-9]-/}"' - {} \; &&
find . -name 'I0*' -execdir bash -c 'mv "$1" "${1/I0[0-9][0-9]-/}"' - {} \;