+ Responder ao Tópico



  1. #1

    Padrão Remover uma linha especifica

    Ola! A todos
    Quero ter um script que ao passo que insiro a informacao desejada na variavel ele.
    adicione, localiza ou remova esta informaçao.

    Eu consegui localizar com o seguinte comando: ok
    grep -ni $variavel $caminho do arquivo

    Eu consegui adicionar com o seguinte comando: ok
    echo $variavel >> $caminho do arquivo

    Meu problema esta em:
    usando o sed para excluir com o seguinte comando:
    sed -i /$variavel/d $caminho do arquivo
    o problema e que se digito na variavel a palavra google para ser excluida
    E eu tiver dentro do txt 3 linhas assim
    google
    google.com
    google.com.br

    ira excluir todas pois contem o texto google

    O que preciso e que apague somente a linha 1 onde esta apenas google.
    nao consegui unir o cat com o | para saida em sed como li em forum.

    alguem pode me dizer onde encontro um materia que possa me esclarecer
    como resolver isto

    Obrigado a todos

  2. #2
    MODERADOR-CHEFE Avatar de osmano807
    Ingresso
    Aug 2008
    Localização
    Araguari - Minas Gerais
    Posts
    1.980
    Posts de Blog
    5

    Padrão

    Código :
    echo "google
    google.com
    google.com.br
    " | sed '/^google$/d'

    Tá removendo só o google sozinho

  3. #3

    Padrão

    Entao....

    Se vc deseja só a palavra coloca o $ no final da variavel para identifiicar este ponto como final

    vai ficar assim

    sed -i /$variavel$/d $caminho

    Abço
    Última edição por tricolor; 04-12-2009 às 13:40.

  4. #4

    Padrão

    Amigos perfeiro. Resolveu em cima do pedido. utilizei a dica do nosso amigo tricolor. Valeu mesmo. Abraços

  5. #5

    Padrão Re: Remover uma linha especifica

    Obrigado funcionou comigo também!

    Só que quando se tem nomes iguais no mesmo arquivo exibe um erro, por exemplo

    teste e Teste

    o erro:

    sed: -e expressão #1, caractere 17: A expressão regular do endereço está inacabada (falta a /)

    O que devo fazer para ele excluir os nomes iguais, mas um de cada vez !?

    o comando que eu estou usando: sed -i /$var$/d $caminho

  6. #6

    Padrão Re: Remover uma linha especifica

    Então necessariamente teste não é igual a Teste se é que estou sendo claro... mas se você deseja remover ou trocar Teste e teste você pode colocar a ER abaixo.. Ex:
    No seu arquivo teste_2010.log você tem a lista

    teste
    Teste
    teste.com.br
    teste.com

    E você quer trocar "teste", "Teste", "teste.com.br" e "teste.com" por "puts" .. vc pode fazer o seguinte
    Código :
    ## Sua variável recebendo o q vc deseja substituir exceto a letra q tem duas variações
    ## ou seja teste sem o t que é "este"
    VAR=este
    sed -i_bkp s/^[Tt]$v/puts/g teste_2010.log
    cat teste_2010.log 
    puts
    puts
    puts.com
    puts.com.br

    Explicando o comando sed -i_bkp s/^[Tt]$VAR/puts/g teste_2010.log
    -i_bkp # salva o arquivo teste_2010.log com o sufixo _bkp no final teste_2010.log_bkp

    ^ # Oq estiver depois do ^ estará no começo da linha (Âncora para início de linha)

    [Tt] # Significa t minúsculo e T Maiúsculo ... pra Teste e teste

    $VAR # É sua variável que contém "este"

    Qualquer dúvida só perguntar...
    Abço