【发布时间】:2012-11-30 12:09:15
【问题描述】:
基本上我要做的是列出具有特定扩展名的当前目录的内容(在我的例子中是 .c 文件)。
所以我认为可行的是:
ls | grep .\*\.c
它主要工作,但也返回以 c 结尾的文件,如
- 音乐(这是一个目录)
- test.doc
我的正则表达式是否有问题,因为我看不到它。
非常感谢
【问题讨论】:
标签: regex bash shell scripting
基本上我要做的是列出具有特定扩展名的当前目录的内容(在我的例子中是 .c 文件)。
所以我认为可行的是:
ls | grep .\*\.c
它主要工作,但也返回以 c 结尾的文件,如
我的正则表达式是否有问题,因为我看不到它。
非常感谢
【问题讨论】:
标签: regex bash shell scripting
您可以这样做:
find -name "*.c"
它会从当前工作目录递归地为您找到所有带有.c 扩展名的文件。
或者,如果您想要非递归并希望使用ls 来实现,您可以这样做:
ls *.c
如果您想知道如何将带有grep 的正则表达式应用于ls 搜索结果(尽管这更麻烦):
ls | grep ".*\.c$"
正则解释:
. - 匹配任意字符.* - 匹配任意字符零次或多次.*\. - 匹配任意字符零次或多次,然后按字面意思匹配.(通过使用\“转义”它来指定)".*\.c - 匹配任何字符零次或多次,然后匹配 . 字面意思,然后匹配字符 c
.*\.c$ - 匹配任何字符零次或多次,然后匹配 . 字面意思,然后匹配字符 c;并且仅当这是模式的结尾(在那之后没有更多的东西)。 $ 是“结束”的正则表达式锚。【讨论】:
你需要转义你的反斜杠:
ls | grep .*\\.c
【讨论】:
. 匹配任何字符,因此您必须转义 . 以匹配实际的 .
你很接近
ls | grep \\.c$
查看双反斜杠
【讨论】:
您可以简单地使用ls *.c 列出当前目录中具有.c 扩展名的所有文件。
【讨论】: