我有一个任务,我必须找到不同的文件,条件我认为需要正则表达式。
例如:
查找以3个小写字母开头且最后一个字母不是' i'的文件。我正在寻找找到这些文件的最佳方法。
我能做到
ls [a-z][a-z][a-z]*[azertyuopqsdfghjklmwxcvbn]
但是,这看起来有点像。 有什么想法吗?
答案 0 :(得分:7)
$ ls
abci ASds dferasfds dsfa998 ilkj323 retk232i
$ find -regextype egrep -regex '.*/[a-z]{3}.*[^i]$'
./dferasfds
./dsfa998
./ilkj323
.*/
需要匹配文件路径的开头部分[a-z]{3}
三个小写字母.*
任何其他角色[^i]$
不以i
但是,如果没有正则表达式,这种特殊情况似乎是可能的:
$ find -name '[a-z][a-z][a-z]*[!i]'
./dferasfds
./dsfa998
./ilkj323
答案 1 :(得分:3)
这些是整体,而不是正则表达式。你不需要正则表达式。
release()
第二种模式涵盖三个字符长的文件名;根据您的要求,不清楚是否应包括这些内容。 (如果不存在匹配的文件,shell将发出警告消息,但这是无害的。)如果没有,只需使用第一个模式。
(我使用printf '%s\n' [a-z][a-z][a-z]*[!i] [a-z][a-z][a-hj-z]
主要是为了说明shell在这里做了实际工作,并且printf
不需要扩展glob模式。)
如果你真的需要正则表达式,ls
是你的朋友。默认情况下,find -regex 'pattern'
将遍历子目录;您可以使用find
来避免这种情况。
也许还可以看看Bash的extended globbing中间选项。