使用正则表达式删除文件

使用正则表达式删除文件

我尝试删除以 A 开头并以 2 个数字结尾的文件,但没有任何效果。
我尝试了以下方法:

rm ^A*[0..9]2$

我哪里错了?

答案1

您可以使用以下命令删除所有符合条件的文件:

ls | grep -P "^A.*[0-9]{2}$" | xargs -d"\n" rm

怎么运行的:

  1. ls列出所有文件(由于结果是通过管道传输的,因此逐行列出)。

  2. grep -P "^A.*[0-9]{2}$"过滤文件列表并仅保留与正则表达式匹配的文件^A.*[0-9]{2}$

    • .*表示 的任意次数出现.,其中.是匹配任意字符的通配符。

    • [0-9]{2}表示 恰好出现两次[0-9],即任意数字。

  3. xargs -d"\n" rm对每个通过管道传输的内容执行rm line一次。line

我哪里错了?

首先,rm不接受正则表达式作为参数。除了通配符之外*,其他每个字符都按字面意思处理。

另外,您的正则表达式有点不对。例如,表示正则表达式中*出现的任何,因此匹配、等,甚至匹配空字符串。...A*AAA

如需了解更多信息,请访问正则表达式.info

答案2

或者使用find

find your-directory/ -name 'A*[0-9][0-9]' -delete

该解决方案将处理诡异的文件名。

答案3

查看文件名扩展bash 手册页的部分:

rm A*[0-9][0-9]

答案4

这在我的 Mac 上运行良好:

rm $(ls | grep -e '^A*[0..9]2$')

相关内容