如何在使用grep时列出文件路径?

时间:2017-07-05 11:00:16

标签: linux macos terminal grep

所以,我正在使用

imhead ../rawdata/m13/m13_dark/*.fit | grep 'Dark Frame'

imhead 基本上打印FITS文件的标题(FITS是天文学中使用的主要图像文件之一)。将其视为摄影文件的 exif 。所以,我正在运行它通过目录中的所有.fits文件,我得到了输出

IMAGETYP= 'Dark Frame' /        Type of image
IMAGETYP= 'Dark Frame' /        Type of image
IMAGETYP= 'Dark Frame' /        Type of image
IMAGETYP= 'Dark Frame' /        Type of image
IMAGETYP= 'Dark Frame' /        Type of image

这是预期的,因为我知道此目录中只有5个文件,其标题包含字符串'Dark Frame'

我想打印这些文件的文件路径,其中grep找到字符串'dark frame'。

我该如何解决?是否有其他命令我应该与 grep 一起使用。

grep -lgrep -H似乎无效

以下是在单个文件上运行的imhead命令的典型输出 Imhead Output

1 个答案:

答案 0 :(得分:1)

已编辑使用 imhead

既然我已经理解了你在做什么,那么评论中提到的关于使用find和简短帮助脚本(比如chkDarkFrame.sh)的方法应该提供一个解决方案。例如,您可以通过调用*.fit来将../rawdata/m13/m13_dark/目录中的每个chkDarkFrame.sh文件传递给find,类似于:

find ../rawdata/m13/m13_dark/ -type f -name "*.fit" -exec ./chkDarkFrame.sh '{}' \;

注意:您可以限制find是否使用-maxdepth选项强行检查

您的chkDarkFrame.sh帮助程序脚本可以在文件名上调用imhead并将结果传递给grep -q,如果'Dark Frame'输出中存在imhead,则打印文件名,例如

#!/bin/bash
imhead "$1" | grep -q 'Dark Frame' && printf "%s\n" "$1"

尝试一下,让我知道这是否更接近。很抱歉早期的混乱。