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.