我很沮丧,试图找出如何使用正则表达式做任何有用的事情。我对我所做的一切都完全不确定,而且我已经试错了;这是没有效果的。
我正在尝试列出当前目录中以字母开头,包含数字,以点后跟小写字符结尾的文件等。 所以我知道一封信的开头是:
^[a-zA-Z]
但我不知道如何使用CONTAINS来表示这个数字。我知道带点的结尾可以是[\.]*
,但我不确定。我发现$
也用于匹配单词末尾的字符串。
我不知道我是否应该使用find
和正则表达式来执行此操作,或ls | grep
....我完全迷失了。任何方向都会受到赞赏。
我想我想问的具体问题是如何将表达式粘合在一起。例如,我试过ls | grep ^ [a-zA-Z] [0-9]但这只显示以字母开头的文件,后跟一个数字。我不知道怎么写一个以字母开头的正则表达式,然后添加下一个要求,即。包含一个数字。
答案 0 :(得分:1)
^[a-zA-Z]
.*[0-9].*
\.[a-z]$
合:
^[a-zA-Z].*[0-9].*\.[a-z]$
查找与正则表达式匹配的文件的最佳方法是使用find -regex
。当您使用时隐含了^
和$
锚点,因此您可以省略它们。您需要在前面添加.*/
以匹配任何目录,因为-regex
匹配目录和文件名。
find -regex '.*/[a-zA-Z].*[0-9].*\.[a-z]'
答案 1 :(得分:0)
网上有大量文档,例如。 GNU's Reference Manual
您的特定示例需要以下内容:
^[:alpha:].*[:digit:].*\.[:lower:]$
或者POSIX类不可用:
^[a-zA-Z].*[0-9].*\.[a-z]$
您可以阅读:
在确定正则表达式后,您可以在要查找文件的目录中使用ls
:
cd <dir>
ls -1 | grep '^[a-zA-Z].*[0-9].*\.[a-z]$'
注意:我试图根据一些评论改进我的答案。