删除文本文件中的特定行

我正在处理一个选项,如果用户键入确切的标题和作者,将能够删除指定的行。

但是,我将无法使其工作。

我的function内容如下所示

fnRemoveBook() { echo"Title: " read Title echo"Author: " read Author if grep -Fqe "$Title:$Author" BookDB.txt; then sed -i '/"$Title:$Author"/ d' BookDB.txt echo "Book removed successfully!" else echo "Error! Book does not exist!" fi } 

BookDB内容如下所示

 Hello World:Andreas:10:5:2 Teaching:Mary Ann:50:23:5 

在键入“Hello World”标题和作者“Andreas”之后,程序将能够进入循环并成功删除echo-ed Book。

然而,我检查了BookDB.txt行还没有被删除,我不知道为什么。

我希望我能在这里得到一些答案,因为我一直在网上做研究,但目前还没有答案。

预先感谢那些帮助! 🙂

你试图把一个bash变量(实际上是两个)传递给一个子程序( sed ),但是把你传递的表达式用单引号括起来,这个表达式没有参数的扩展。 这意味着sed正在看$Title:$Author 。 尝试把整个sed表达式放在双引号中:

 sed -i "/$Title:$Author/d" BookDB.txt 

这将允许bash在进入sed之前扩展$Title$Author

使用单引号不会内插变量。 尝试这样的事情 –

 fnRemoveBook() { echo "Title: " read Title echo "Author: " read Author if grep -Fqe "$Title:$Author" BookDB.txt; then sed -i "/$Title:$Author/ d" BookDB.txt # <---- Changes made here echo "Book removed successfully!" else echo "Error! Book does not exist!" fi }