grep *.c 不工作

viv*_*_nk 0 linux shell grep regex

我在当前目录中有一个“.c”(c 文件)列表。

我必须在当前目录中找到所有 .c 文件。

可以使用的命令 id ls *.c

但是,另一种方法是使用 grep。

所以如果我给

 ls | grep *.c
Run Code Online (Sandbox Code Playgroud)

它不会为此命令返回任何结果,而对于其他文件类型,如“.java”、“.txt”,它会给出预期的结果。

grep 命令中的“*.c”有什么特殊含义吗?或者我可以知道这种行为的原因吗?

Bri*_*ell 7

*.c是一个 glob 模式,同时grep搜索正则表达式。

你想ls | grep '\.c$',如果你想发现,在结尾的所有文件.c

grep默认情况下匹配任何子字符串,而不是整个字符串,因此您无需编写与文件名开头匹配的内容。如果您确实想编写它,它将.*在正则表达式中。.表示“除行尾以外的任何字符”,并*表示“前一个表达式的任意数量(零个或多个)”。

因为.在正则表达式中有特殊的含义,如果要匹配文字.,需要用\. 因为\在shell中有特殊含义,所以需要用单引号( ')来引用正则表达式。

为确保仅匹配文件名的末尾,请使用$,它匹配行的末尾。