如何使用Linux命令行提取包含匹配指定模式文件的目录路径
提取匹配后缀文件所在目录的命令实现
你已经通过grep "\.txt" foo筛选出了所有后缀为.txt的文件路径,后续可以拼接以下命令实现需求,两种常用方案如下:
方案1:sed 直接处理(无需调用额外命令)
完整命令
grep "\.txt" foo | sed 's/\/[^/]*$/\//' | sort -u
逻辑说明
sed 's/\/[^/]*$/\//':用正则匹配路径末尾最后一个/之后的所有字符(即.txt文件名部分),将其替换为/,直接得到文件所在目录路径sort -u:对输出的目录去重,避免同一目录下存在多个txt文件时重复输出
方案2:结合dirname命令(可读性更高)
完整命令
grep "\.txt" foo | xargs -n1 dirname | sed 's@$@/@' | sort -u
逻辑说明
xargs -n1 dirname:将每行筛选出的文件路径单独传给dirname命令,直接输出文件所属的目录sed 's@$@/@':给输出的目录路径末尾补全/,匹配你需要的输出格式sort -u:对目录结果去重
验证结果
两种方案运行后,针对你的示例输入都会输出符合预期的结果:
/a/b/c/ /a/b/c/d/ /a/b/
内容的提问来源于stack exchange,提问作者Bhakta Raghavan
相关产品推荐
相关产品推荐

