Your new 'grep' takes one single input: the output of sort -k 2 *.txt, which
is *not* binary (and happened to have the file descriptor 63 in your
execution). That 'grep' never sees the files that match .txt. So, of
course, it cannot write their names.
Reading and writing a same file (HNusage/HNs.bst.lt/temp) in a same command
line is still nondeterministic. I spent four posts explaining it to you. I
will not do it again: learn pipes and redirections.
Learning regular expressions is not optional before using 'grep'. Again: a
dot (all over HNusage/HNs.bst.lt/temp) means "any character". Not
necessarily a dot. And again: 'grep' selects lines containing the pattern.
Not necessarily as a whole "field" (a concept that does not exists in
'grep'). For instance, if the pattern "0" is still in
HNusage/HNs.bst.lt/temp, all lines including "0" are selected. And I see
little reason why a sorted input would fasten 'grep' (maybe branch
prediction... but most probably your new command line does not do the same
thing as the previous one).
Apart from actually being correct, the solution with 'join' is probably
faster. I would actually be interested in the run time comparison.