Que tal usar (grep no meu Ubuntu, tenho certeza que a maior parte do grep tem essa bandeira)
-o, --only-matching Print only the matched (non-empty) parts of a matching line, with each such >part on a separate output line.
junto com
-b, --byte-offset Print the 0-based byte offset within the input file before each line of >output. If -o (--only-matching) is specified, print the offset of the matching part itself.
Então você tem o nome do arquivo e a parte dele que você quer.
Além disso, como você conseguiu manipular seus arquivos assim? Eu tentei usar VI para substituir novas linhas apenas com CR. Mas isso fez com que grep e cat se comportassem muito estranhamente.
conteúdo do teste de arquivo
gggggggggggggggggggg^Mggggggggasdfgggggggg^Mgggggggggggggggggggg
~/test$ grep asdf test
gggggggggggggggggggg
~/test$ cat test
gggggggggggggggggggg
Parece normal no bloco de notas