我有一个任务,需要找到符合一定条件的文件,这些条件可能需要使用正则表达式。
例如:
查找以三个小写字母开头且最后一个字母不是“i”的文件。我正在寻找最好的方法来查找这些文件。
我可以这样做:
ls [a-z][a-z][a-z]*[azertyuopqsdfghjklmwxcvbn]
但是,这似乎有点困难。有什么想法吗?
$ 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
printf '%s\n' [a-z][a-z][a-z]*[!i] [a-z][a-z][a-hj-z]
[a-hj-z]
,对吧?祝好运。 - shellter[^aeiou0-9::punct::]
(如果你只想匹配小写字符)。实际上,[b-d...]
也不错,因为它明确列出了你想要匹配的内容,而你不必去猜测你可能会错过哪些“快捷”术语中的::punct::
和其他一些。还有其他的::named-ranges::
,但我不想让你去找参考资料;-)(我正在恢复手术)。祝你好运。 - shellter^
进行否定,但是便携式、传统的否定运算符是!
。 - tripleee!
是csh的否定符号,所以我试图将那些年份从我的记忆中屏蔽掉;-)。很好的回答!祝大家好运。 - shellter