Shell 编程使用 sed 从 txt 文件中删除一行

Shell 编程使用 sed 从 txt 文件中删除一行

我想使用 grep 和 sed 函数从 .txt 文件中删除一行,但我得到的输出不会改变文本文件中的任何信息。关于如何获得所需输出有什么建议吗?谢谢。

  • 标题和年份都声明为一个数组;
  • .txt 文件中的信息格式为 (标题) : (年份) : (浏览量) : (评分)

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
}

答案1

我所做的就是将单引号改为双引号,我需要的功能就可以正常工作。谢谢@steeldriversed指出这一点。对于退出状态@waltinator也会对其进行改进,以便我能够让程序尽可能地没有错误。

再次感谢@steeldriver@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
}

答案2

一些额外的事情:

   1 函数 remove_movie
   2 {
   3 echo "请输入电影名称"
   4 读标题
   5 echo “请输入电影年份”
   6 读年
   7 回显“”
   8 grep ".*$title.*$year" movieDB.txt >/dev/null 2>&1
   9 如果 [ “$?” = “0” ]
  10 然后
  11 sed -i '/$title/d' movieDB.txt
                      ^––SC2016 表达式不会在单引号中扩展,请使用双引号。
  12 echo $movieDB "' $title '电影已成功删除 "
                   ^––SC2154 movieDB 被引用但未分配。
                   ^––SC2086 双引号可防止通配符和单词拆分。
  十三 其他
  14 echo "电影$title不存在。"
  十五 FI
  16 }

来源

相关内容