+ Responder ao Tópico



  1. #1

    Padrão sed + variaveis

    Caros,

    Estou com um probleminha ao usar o "sed" em meu script, ao tentar passar variavel em um laço ele somente remove da lista a ultima variavel o comando no fim do laço. segue o codigo

    Código :
     
    array=( ${array[*]} `ls -1 *.loc` )
     
     
     for palavra in ${array[@]}; do
     
              sed  "/$palavra/d" lista_loc.txt;
     
    done

    Poderiam me dar uma ajuda?

    Grato

  2. #2

    Padrão

    Você está querendo remover a palavra definitivamente do arquivo lista_loc.txt?

    Se você executar o seu script usando bash -x script.sh poderá ver que ele remove todas as ocorrências do array, mas uma por vez. Se você quiser alterar o arquivo lista_loc.txt e remover as ocorrências a medida que elas aparecerem, você tem que usar sed -i "/$palavra/d" lista_loc.txt, assim ele vai alterar o arquivo removendo a palavra de dentro dele.

    Se não for isso que você quer, poste aqui um exemplo do que você está querendo que eu te ajudo melhor.

  3. #3

    Padrão

    Citação Postado originalmente por galahad Ver Post
    Você está querendo remover a palavra definitivamente do arquivo lista_loc.txt?

    Se você executar o seu script usando bash -x script.sh poderá ver que ele remove todas as ocorrências do array, mas uma por vez. Se você quiser alterar o arquivo lista_loc.txt e remover as ocorrências a medida que elas aparecerem, você tem que usar sed -i "/$palavra/d" lista_loc.txt, assim ele vai alterar o arquivo removendo a palavra de dentro dele.

    Se não for isso que você quer, poste aqui um exemplo do que você está querendo que eu te ajudo melhor.

    galahad,
    Muito obrigado pela sua dica, na verdade o comando remove a linha onde encontra a palavra, a sua dica funcionou, apenas preciso que o arquivo original se mantenha, teria como eu fazer isso sem comandos terceiros (cp lista_loc.txt lista_clean.txt)? Usando o comando abaixo ele nao direcionou a saida para lista_clean.txt.

    Código :
    sed -i  "/$palavra/d" lista_loc.txt > lista_clean.txt


    Obrigado!

  4. #4

    Padrão

    você pode tentar usar:

    sed -e "/$palavra/d" lista_loc.txt >> lista_clean.txt
    Acho que resolve seu problema

  5. #5

    Padrão

    Citação Postado originalmente por galahad Ver Post
    você pode tentar usar:

    sed -e "/$palavra/d" lista_loc.txt >> lista_clean.txt
    Acho que resolve seu problema

    galahad, mais uma vez agradeço pela sua ajuda, ja havia tentado assim e nao funcionou como esperado, mas usando sua dica anterior funcionou perfeitamente, adicionei um "cp" no script e ficou tudo certo.

    Obrigado!