sed -i -e '/Leonardo/ s/$/ Narnie/' database_readers.txt
Isso usa a opção de edição no local sed ( -i ) para pesquisar todas as linhas correspondentes à regexp Leonardo e substituir a âncora de fim de linha ( $ ) por um único espaço e a palavra Narnie . Isso efetivamente anexa o Narnie ao final das linhas correspondentes.
Cuidado com o padrão de pesquisa regexp - é fácil combinar mais linhas do que você esperava. Teste primeiro com:
sed -n -e '/Leonardo/ s/$/ Narnie/p' database_readers.txt
A opção -n combinada com o p no final do s/// faz com que sed imprima APENAS as linhas que foram alteradas. Do NOT use isso com sed -i , a menos que você queira excluir TODAS as linhas inalteradas do seu arquivo.
De qualquer forma, se isso imprimir mais linhas do que você esperava, altere Leonardo para Leonardo DaVinci ou ^753[[:space:]]\+ (supondo que o número no início da linha seja um ID exclusivo) e tente novamente até que muda apenas a (s) linha (s) que você esperava.
Para algo mais complicado do que isso, você pode querer usar sqlite (ou mesmo mysql ou postgresql ) em vez de um arquivo de texto simples. Ou use uma linguagem como perl , que possui muitos módulos de biblioteca para manipular bancos de dados de arquivos simples.