如何将 grep 与 glob 模式一起使用? (就像我们在 find 命令中使用它一样)
How to use the grep with globs patterns? (like we use it in find command)
让我们看看是否要找到以下格式的所有文件名
gstreamer_abc.c
gstreamer_xyz.c
gstreamer_abcxyz.c
然后我们可以使用下面的查找命令
find ./ -iname "gstreamer_*.c"
同样的方法我需要在文件中 grep 一些 API,如下所示
gstABCNode()
gstAnythingCanBeHereNode()
gstXyzNode()
我正在尝试一些东西
grep -rni "gst*Node" ./
grep -rni "gst^\*Node" ./
但它没有提供我在这里需要的东西。首先,是否可以像这样使用 grep 进行搜索,或者如果可能,那么如何使用 grep 这种模式?
您只能grep
这些文件:
grep --include "gstreamer_*.c" -rni "gst*Node" ./
您的问题是 find
使用“globs”而 grep
使用正则表达式。对于 find
,*
表示“任意长度的字符串”。对于 grep
,*
表示“前面的元素(字符)的任意次数”。这样,您的命令:
grep -rni "gst*Node" ./
搜索任何以 gs
开头的字符串、任意次数的 t
和 Node
(这可能不是您想要的)。而是尝试:
grep -rni "gst.*Node" ./
.
表示“任意字符”,所以.*
真正表示“任意长度的字符串”。
让我们看看是否要找到以下格式的所有文件名
gstreamer_abc.c
gstreamer_xyz.c
gstreamer_abcxyz.c
然后我们可以使用下面的查找命令
find ./ -iname "gstreamer_*.c"
同样的方法我需要在文件中 grep 一些 API,如下所示
gstABCNode()
gstAnythingCanBeHereNode()
gstXyzNode()
我正在尝试一些东西
grep -rni "gst*Node" ./
grep -rni "gst^\*Node" ./
但它没有提供我在这里需要的东西。首先,是否可以像这样使用 grep 进行搜索,或者如果可能,那么如何使用 grep 这种模式?
您只能grep
这些文件:
grep --include "gstreamer_*.c" -rni "gst*Node" ./
您的问题是 find
使用“globs”而 grep
使用正则表达式。对于 find
,*
表示“任意长度的字符串”。对于 grep
,*
表示“前面的元素(字符)的任意次数”。这样,您的命令:
grep -rni "gst*Node" ./
搜索任何以 gs
开头的字符串、任意次数的 t
和 Node
(这可能不是您想要的)。而是尝试:
grep -rni "gst.*Node" ./
.
表示“任意字符”,所以.*
真正表示“任意长度的字符串”。