我试图删除以A开头并以2个数字结尾的文件,但是它没有任何作用。
我试过的
rm ^A*[0..9]2$
我哪里错了?
我试图删除以A开头并以2个数字结尾的文件,但是它没有任何作用。
我试过的
rm ^A*[0..9]2$
我哪里错了?
Answers:
您可以使用以下命令删除所有符合条件的文件:
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
等等,甚至一个空字符串。
有关更多信息,请访问Regular-Expressions.info。
-d"\n
交换机修复的空间问题。
grep -P
(Perl正则表达式)。grep -E
在这种情况下可能会起作用。
-I
与with一起使用,xargs
并且始终先对非致命命令进行测试:xargs -d"\n" -I {} echo "{}"
或使用find
:
find your-directory/ -name 'A*[0-9][0-9]' -delete
该解决方案将处理奇怪的文件名。
-type f
xargs
方法与一起使用rm -f
。
请参见bash手册页的文件名扩展部分:
rm A*[0-9][0-9]
使用regexp的解决方案要好200倍,即使您可以在使用命令之前看到哪个文件将被删除,并切断最终管道,该解决方案也要好200倍:
ls | grep -P "^A.*[0-9]{2}$"
然后,如果正确,则使用:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d "\n" rm
这要好200倍,因为如果您使用Unix,那么了解如何使用grep非常重要。如果您知道如何使用它,它将非常强大。