我想使用 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 }