Experimente egrep -o '[A-Za-z](.*[A-Za-z])?' < infile | egrep -o '[A-Za-z]+' > outfile
para o seu exemplo.
A primeira parte seleciona coisas semelhantes a nomes (deve começar com uma letra e terminar com uma letra, mas pode conter qualquer coisa entre elas), e então a segunda egrep
nos filtra para apenas os nomes que são todos letras.
Olhando para isso, já posso ver vários caminhos sobre como criar uma entrada que faria com que essas expressões falhassem e não correspondessem exatamente às coisas corretas (bem, isso corresponderá como está escrito, mas você deixou ambiguidades - Como deve ..Richard..<Tim?..
ser tratado?), Mas foi fácil colocar isso em conjunto com base nos dados de entrada - o shell script geralmente tem menos de 100% de exatidão matemática para todas as entradas possíveis, mas sim conhecer seu domínio de entrada e obter o trabalho feito com expressões e comandos que funcionam bem o suficiente para a entrada que você está tendo que processar.