我尝试删除以 A 开头并以 2 个数字结尾的文件,但没有任何效果。
我尝试了以下方法:
rm ^A*[0..9]2$
我哪里错了?
答案1
您可以使用以下命令删除所有符合条件的文件:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d"\n" rm
怎么运行的:
ls
列出所有文件(由于结果是通过管道传输的,因此逐行列出)。grep -P "^A.*[0-9]{2}$"
过滤文件列表并仅保留与正则表达式匹配的文件^A.*[0-9]{2}$
.*
表示 的任意次数出现.
,其中.
是匹配任意字符的通配符。[0-9]{2}
表示 恰好出现两次[0-9]
,即任意数字。
xargs -d"\n" rm
对每个通过管道传输的内容执行rm line
一次。line
我哪里错了?
首先,rm
不接受正则表达式作为参数。除了通配符之外*
,其他每个字符都按字面意思处理。
另外,您的正则表达式有点不对。例如,表示正则表达式中*
出现的任何,因此匹配、等,甚至匹配空字符串。...
A*
A
AA
如需了解更多信息,请访问正则表达式.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$')