grepにバイナリファイルだと怒られる

テキストファイルなのにgrepをかけると、バイナリファイルだと怒られる。
vi,cat,less,moreなど使えば読める。

#! /usr/bin/env ruby
pat = ARGV.shift
while gets do
    print if /#{pat}/
end

は動いた。

less file | grep pattern #OK
cat  file | grep pattern #OUT
more file | grep pattern #OUT

なぜかlessだけ動く。

less file > dummy
grep pattern dummy #OUT

これも動かない。

原因
fileの前半に変な文字列があった。(vi,lessで開くと^@で表記される。)
ある程度下の行に移動させると、grepが使える。
linuxにおけるバイナリファイルの判定はアバウトなのかもしれないと思った。