O problema que você tem é que .*
corresponde a qualquer sequência de caracteres (talvez omitindo nova linha) incluindo espaços.
Então você quer mudar isso para algo que corresponda apenas aos caracteres que compõem uma palavra. Como exatamente você faz isso depende de qual implementação de expressões regulares você está usando, e se você quer considerar caracteres de diferentes alfabetos. Uma maneira razoavelmente portátil é usar [[:alpha:]]*
A sintaxe a ser encontrada no início de uma palavra também depende da implementação. Para grep você pode usar \<
.
Para obter apenas a palavra, há duas opções para o grep que podem ajudar, -o
e --color
. O primeiro apenas mostra o que é correspondido e o segundo coloca toda a linha com a partida destacada.
Então você provavelmente quer
grep -o '\<b[[:alpha:]]*ch' filename