linux - 如何使用 grep 只获取没有路径的文件名

标签 linux bash grep

我遇到了以下问题。

我正在做一个 grep,比如:

$command = grep -r -i --include=*.cfg 'host{'/omd/sites/mesh/etc/icinga/conf.d/objects

我得到了以下输出:

/omd/sites/mesh/etc/icinga/conf.d/objects/testsystem/test1.cfg:define host{
/omd/sites/mesh/etc/icinga/conf.d/objects/testsystem/test2.cfg:define host{
/omd/sites/mesh/etc/icinga/conf.d/objects/testsystem/test3.cfg:define host{
...

对于所有 *.cfg 文件。

使用 exec($command,$array)

我将结果传递到一个数组中。

是否可以通过 grep 命令仅获取文件名。

我尝试了以下方法:

$Command=    grep -l -H -r -i --include=*.cfg 'host{' /omd/sites/mesh/etc/icinga/conf.d/objects

但我得到了相同的结果。

我知道论坛上存在类似的主题。( How can I use grep to show just filenames (no in-line matches) on linux? ),但解决方案不起作用。

使用“exec($Command,$result_array)”我尝试获取包含结果的数组。 提到的解决方案都有效,但我无法使用 exec() 获得结果数组。

谁能帮帮我?

最佳答案

还有一个更简单的解决方案:

grep -l whatever-you-want | xargs -L 1 basename

或者你可以避免使用 xargs 而使用子 shell,如果你没有使用旧版本的 GNU coreutils:

basename -a $(grep -l whatever-you-want)

basename 是获取不带路径的文件名的 bash 直接解决方案。您可能还对仅获取路径的 dirname 感兴趣。

GNU Coreutils basename documentation

关于linux - 如何使用 grep 只获取没有路径的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24806674/

相关文章:

bash - 为什么在传递带引号的参数时得到 "/bin/sh: Argument list too long"?

Python 脚本不会在键盘快捷键上运行

regex - pcregrep 一个 wiggle 文件来提取染色体。多行正则表达式搜索

linux - 使用grep查找Linux中具有特定扩展名的名称

linux - 来自 header shell 脚本的子字符串

linux - 在 linux C 中获取 GPU 信息

linux - 正在读取包列表...错误!在 EC2 上

C函数修改inode?

c - 在套接字上使用 O_NONBLOCK 后,有没有办法避免 HUP?

linux - 如何将 bash 脚本的输出重定向到动态屏幕?