bash:获取一个文件名,第一行与字符串模式匹配

时间:2017-05-22 21:19:50

标签: bash find

如何找到第一行与某个字符串匹配的文件名?

到目前为止,我已经提出了

find . -type f -exec grep -l "MAGIC_WORD" {} \;

但是我会在所有文件行中搜索MAGIC_WORD,而我只是在第一行查找具有该模式的文件。

我可能应该以某种方式使用head -1,但不知道如何将其与find -exec混合并返回正确的文件名

1 个答案:

答案 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 (这意味着是真的)如果它找到了模式,或者任何其他整数如果它失败了(这意味着虚假)

我所做的是创建一个包含所有文件路径的列表,然后为每一个我检查它们的第一行是否与模式匹配,如果是,我也打印文件路径。我不知道你是否只需要没有路径的文件名。