如何找到第一行与某个字符串匹配的文件名?
到目前为止,我已经提出了
find . -type f -exec grep -l "MAGIC_WORD" {} \;
但是我会在所有文件行中搜索MAGIC_WORD
,而我只是在第一行查找具有该模式的文件。
我可能应该以某种方式使用head -1
,但不知道如何将其与find -exec
混合并返回正确的文件名
答案 0 :(得分:0)
这听起来很疯狂,因为你想要阅读机器上的每个文件。
for filename in "$(find . -type f)"
do
line=$(head -n 1 "$filename")
if grep -q "MAGIC WORD" <<< "$line"
then
printf "$filename"
fi
done
其中-q
选项返回grep的退出状态。如果我没记错的话,它返回 0 (这意味着是真的)如果它找到了模式,或者任何其他整数如果它失败了(这意味着虚假)。
我所做的是创建一个包含所有文件路径的列表,然后为每一个我检查它们的第一行是否与模式匹配,如果是,我也打印文件路径。我不知道你是否只需要没有路径的文件名。