2012-01-26 17 views
3

私は、ユーザーが正確なタイトルと著者を入力した場合、指定された行を削除するオプションに取り組んでいます。テキストファイル内の特定の行を削除する

しかし、私はそれを動作させることはできません。

My機能の内容は、私がタイトルと著者のための「アンドレアス」は、プログラムのために「Hello World」のキー入力された後BookDBの内容が

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

の下に表示され

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.txtをチェックしましたが、その行はまだ削除されておらず、なぜか不思議です。

私はインターネット上で研究していますが、まだ答えが出ていないので、ここでいくつかの回答を得ることができることを願っています。

事前にお手伝いいただきありがとうございます。 :)

答えて

2

- このような何かを試してみてくださいパラメータ拡張はありません。つまり、sedには文字通り$Title:$Authorが表示されます。二重引用符で全体sed式を入れてみてください:

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

これは、彼らがsedに入る前に、bash$Title$Authorを拡大することができます。

+0

皆さんありがとう!私の問題を解決! 私はインターネットで例文/質問/回答を検索しようとしていますが、私の場合と似たものはまだ見ていません。 – Andres

1

単一引用符を使用すると、変数が補間されません。あなたがいた、サブプログラム(sed)にbash変数(実際には2を、)渡そうとしていますが、単一引用符で渡している表現を囲んだ

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あなたはごめんなさい。あなたは良い質問を投稿しました。あなたはあなたの問題を説明し、あなたが試したことを示し、あなたの望む結果を述べました。あなたの問題が解決され、あなたは行こうとしていると聞くのは良いことです! :) がんばろう!! –

関連する問題