我有多个文件写为 */*/*/*/ ... */*.h 或 .hpp。我需要获取这些文件的目录,而不是文件本身。有没有什么办法,使用 sed,我可以做类似'find last / in line,然后删除接下来的任何内容,直到 \n?\
PS:我知道 \(.*\) 或 (.*),然后将第 i 个出现称为 \i,但有没有办法告诉 sed 删除 \i?\
编辑:
我通过执行类似的操作生成了一个文件
find . | grep *.h >> file ; find . | grep *.hpp >> file
我要处理的是这个文件的内容。
要获取包含文件名后缀
.h
或.hpp
使用的文件的目录find
:这将查找名称与两个给定模式之一匹配的所有常规文件的路径名。对于每个这样的路径名,该
dirname
实用程序用于提取路径名的目录路径部分。使用 GNU
find
,您可以改为这使用非标准打印带有格式化选项
-printf
的路径名(即目录路径)的“头” 。%h
要获得唯一的路径名,您可以切换到查找目录而不是文件:
bash
这会为成批的目录路径名运行一个简短的脚本。短脚本在启用nullglob
和dotglob
shell 选项的情况下运行,这意味着不匹配任何内容的通配模式将被删除,通配模式也可能匹配隐藏的名称。该循环遍历当前批次的路径名,
*.h
并*.hpp
在每个目录中扩展两个 globbing 模式。如果模式匹配至少一个名称,则输出目录的路径名。然而,最后一个变体将报告包含与名称匹配的任何类型的文件的目录,
*.h
或者*.hpp
,而不仅仅是常规文件。在
zsh
外壳中:dirs
这将创建一个仅存储唯一元素的数组变量。我们将它初始化为当前目录下任意位置的目录集,其中包含匹配*.h
or的常规文件*.hpp
,然后我们打印数组的内容。