在bash中使用正则表达式来查找文件

时间:2012-12-12 17:51:11

标签: regex bash shell scripting

基本上我要做的是列出当前目录中具有特定扩展名的内容(在我的情况下是.c文件)。

所以我认为可行的是:

ls | grep .\*\.c

它主要起作用,但也返回以c结尾的文件,如

  1. 音乐(这是一个目录)
  2. Test.doc的
  3. 我的正则表达式有问题,因为我看不到它。

    非常感谢

4 个答案:

答案 0 :(得分:4)

您只需使用ls *.c列出当前目录中扩展名为.c的所有文件。

答案 1 :(得分:3)

以下是您可以做的事情:

find -name "*.c"

它将从当前工作目录中递归地找到所有具有.c扩展名的文件。

或者,如果您想要非递归并希望使用ls,则可以执行以下操作:

ls *.c

如果您想知道如何将grep的正则表达式应用于ls搜索结果(即使这更麻烦):

ls | grep ".*\.c$"

Regexplanation:

  • . - 匹配任何字符
  • .* - 匹配任何字符零次或多次
  • .*\. - 匹配任何字符零次或多次,然后按字面匹配.(通过“{转发”与\指定)
  • ".*\.c - 匹配任何字符零次或多次,然后按字面匹配.,然后匹配字符c
  • .*\.c$ - 匹配任何字符零次或多次,然后按字面匹配.,然后匹配字符c;并且只有当这是模式的结束时(之后没有更多的东西)。 $是“结束”的正则表达式锚点。

答案 2 :(得分:2)

你非常接近

ls | grep \\.c$

查看双反斜杠

答案 3 :(得分:1)

你需要逃避反斜杠:

ls | grep .*\\.c