Linux 如何在使用grep时列出文件路径?
所以,我正在使用Linux 如何在使用grep时列出文件路径?,linux,macos,terminal,grep,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 IMAGET
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在其中找到字符串“暗框”的这些文件的文件路径
我该怎么做呢?是否有另一个命令,我应该与grep一起使用
grep-l或grep-H似乎不起作用
以下是在单个文件上运行的imhead命令的典型输出
编辑以使用imhead
现在我了解了您正在做的事情,关于使用find和一个简短的助手脚本的评论中提到的方法chkDarkFrame.sh应该提供一个解决方案。例如,您可以通过调用find将在../rawdata/m13/m13_dark/目录中找到的每个*.fit文件传递到chkDarkFrame.sh,类似于:
find ../rawdata/m13/m13_dark/ -type f -name "*.fit" -exec ./chkDarkFrame.sh '{}' \;
注意:您可以使用-maxdepth选项限制是否重新查找检查
您的chkDarkFrame.sh帮助程序脚本可以调用文件名上的imhead,并将结果传输到grep-q,如果imhead输出中存在“暗框”,请打印文件名,例如
#!/bin/bash
imhead "$1" | grep -q 'Dark Frame' && printf "%s\n" "$1"
试试看,如果离得更近,请告诉我。很抱歉造成早期的混乱。您能否添加fit文件的示例标题以及所需的输出?如果您只想将文本输入传递给grep,您希望它如何知道它来自哪个文件?因为您的编辑仍然无法回答我的查询。。也许,您应该一个接一个地循环文件。。。未测试,但类似于../rawdata/m13/m13_dark/*.fit中的文件;dogrep-q‘暗框’这是一个普通的imhead输出文件。不用那么多命令,只需使用grep-l。。。但问题是输入文件不是文本文件而是图像。实际上,如果我不使用imhead命令,这将不起作用。grep可以直接处理fits文件,但文件很大,需要花费大量时间。此外,grep-H返回'Standard input'@Prathamesh您尝试过我建议的for循环了吗?该循环可以工作,但我想知道是否有一种更简单的方法不使用循环。也许用另一个命令。Grep-l或-H仅返回标准输入。我知道您必须使用imhead。然后使用-execdir启动一个调用imhead的助手进行查找,这可能就是问题所在。