2012-01-26 86 views
3

我正在處理一個選項,如果用戶鍵入確切的標題和作者,將能夠刪除指定的行。刪除文本文件中的特定行

但是我無法使它工作。

我的功能內容如下所示

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」的鍵後的標題和「安地列斯」的作者,程序將能夠進入循環併成功刪除echo-ed Book。

但是我檢查了BookDB.txt這行還沒有被刪除,我想知道爲什麼。

我希望我能在這裏得到一些答案,因爲我一直在網上做研究,但目前還沒有答案。

在此先感謝那些幫助! :)

回答

2

你想一個bash變量(二,實際上)傳遞到子程序(sed),但圍繞着你傳遞單引號的表達,它不沒有參數擴展。這意味着sed字面上看到$Title:$Author。嘗試把雙引號全sed表達:

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

這將使bash擴大$Title$Author他們進入sed之前。

+0

感謝你們!解決了我的問題! 我很抱歉,因爲我一直試圖在互聯網上搜索示例/問題/答案,但我還沒有看到任何類似於我的情況。 – Andres

1

使用單引號不會插入變量。嘗試這樣的事情 -

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 
} 
+0

感謝你們!解決了我的問題! 我很抱歉,因爲我一直試圖在互聯網上搜索示例/問題/答案,但我還沒有看到任何類似於我的情況。 – Andres

+0

@Andres你不必感到抱歉。你發佈了一個很好的問題。你解釋了你的問題,展示了你所嘗試過的並說明了你想要的結果。很高興聽到你的問題已經解決,你很好去! :) 祝你好運!! –