Banco de dados da biblioteca

1

Eu tenho um banco de dados de leitores e gostaria de lhes emprestar um livro e escrevê-lo no banco de dados.

Exemplo:

Leitor

753     Leonardo DaVinci    [email protected]   321654987   Lended Books:

grep "Leonardo" database_readers.txt | sed  "s/\(.*\):/: Narnie/"

Com este comando eu só saio a linha com o livro Narnie adicionado no final da linha, mas como eu mudo a linha no arquivo?

Obrigado por qualquer conselho

    
por Mafi 25.05.2016 / 17:06

1 resposta

1
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.

    
por 26.05.2016 / 05:14