Programação shell usando sed para excluir uma linha do arquivo txt

2

Eu quero remover uma linha de um arquivo .txt usando as funções grep e sed, mas a saída que obtenho não altera nenhuma das minhas informações no arquivo de texto. Alguma sugestão sobre como obter o resultado desejado? Obrigado.

  • O título e o ano são declarados como uma matriz;
  • O formato das informações no arquivo .txt é (título): (ano): (visualizações): (classificação)
function remove_movie
{
    echo "Please Key in Title of movie"
    read title 
    echo "Please Key in the Year of movie"
    read year 
    echo ""
    grep ".*$title.*$year" movieDB.txt >/dev/null 2>&1 
    if [ "$?" = "0" ]
    then
        sed  -i '/$title/d' movieDB.txt
        echo $movieDB "  ' $title 'movie deleted successfully "
    else
        echo "The movie $title does not exist."
    fi
}
    
por virginubuntuuser 11.07.2015 / 17:47

2 respostas

2

Tudo o que fiz foi alterar as aspas simples para aspas duplas e a função que eu precisava funcionava bem. Obrigado @steamdriver por apontar isso. Para o status de saída de sed apontado por @waltinator irá trabalhar nele também, para que eu possa obter o programa como livre de bugs quanto possível.

Mais uma vez obrigado @steeldriver e @ waltinator :)

function remove_movie
{
    echo "Please Key in Title of movie"
    read title 
    echo "Please Key in the Year of movie"
    read year 
    echo ""
    grep ".*$title.*$year" movieDB.txt >/dev/null 2>&1 
    if [ "$?" = "0" ]
    then
        sed  -i "/$title/d" movieDB.txt
        echo $movieDB "  ' $title 'movie deleted successfully "
    else
        echo "The movie $title does not exist."
    fi
}
    
por virginubuntuuser 12.07.2015 / 12:03
1

Algumas coisas adicionais:

   1  function remove_movie
   2  {
   3      echo "Please Key in Title of movie"
   4      read title 
   5      echo "Please Key in the Year of movie"
   6      read year 
   7      echo ""
   8      grep ".*$title.*$year" movieDB.txt >/dev/null 2>&1 
   9      if [ "$?" = "0" ]
  10      then
  11          sed  -i '/$title/d' movieDB.txt
                      ^––SC2016 Expressions don't expand in single quotes, use double quotes for that.
  12          echo $movieDB "  ' $title 'movie deleted successfully "
                   ^––SC2154 movieDB is referenced but not assigned.
                   ^––SC2086 Double quote to prevent globbing and word splitting.
  13      else
  14          echo "The movie $title does not exist."
  15      fi
  16  }

Fonte

    
por A.B. 12.07.2015 / 14:34