如何根据在该文件上运行的命令输出的内容搜索文件

时间:2015-09-22 22:07:42

标签: linux unix grep

我正在为我的一位教授做一个项目,他让我根据他们的头文件(特别是他们的图像是什么星星)对几百个.fits图像进行排序。我认为grep将是最好的方式这样做但我无法根据标题找出如何使用grep。

我正在进入:

ls | imhead *.fits | grep -E -r "PG\ 1104+243" *

暂时将它们列出来,一旦列出,我知道如何将它们复制到目录中。

我是使用grep的新手,所以我不确定我的错误在哪里?任何帮助将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:1)

假设imghead.fits的标头解压缩为txt,您可以使用简单的shell脚本来执行此操作:

script.sh

#!/bin/bash
grep "$1" "$2" > /dev/null 2>&1 && echo "$2"

请注意,如果您使用扩展正则表达式,+是一个特殊字符,这意味着如果您在问题中传递-E。没有任何选项的简单grep应该可以解决这个问题。

使用find在当前文件夹中的每个*.fits文件上执行脚本:

find -maxdepth 1 -name '*.fits' -exec ./script.sh 'PG 1104+243' {} \;

答案 1 :(得分:0)

如果您要复制/移动/更改或对您找到的文件执行某些操作,那么在复杂性和引用方便性方面,使用这样的循环可能会更好:

#!/bin/bash

find . -name \*.fits -print0 | while read -d '' -r file; do
    echo Checking file: $file
    imhead "$file" | grep -q 'PG 1104+243'
    if [ $? -eq 0 ]; then
       echo Object matches: $file
    fi
done