Удаление определенной строки в текстовом файле - PullRequest
3 голосов
/ 26 января 2012

Я работаю над опцией, которая сможет удалить указанную строку, если пользователь введет точное название и автора.

Однако я не смогу заставить его работать.

Содержание моей функции показано ниже

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» для автора, программа сможет войти в цикл и удачно отобразить книгу.

Однако я проверил BookDB.txt, строка еще не была удалена, и мне интересно, почему.

Я надеюсь, что смогу получить некоторые ответы здесь, поскольку я занимаюсь исследованиями в Интернете, но до сих пор не имею ответов.

Заранее спасибо тем, кто помог! :)

Ответы [ 2 ]

2 голосов
/ 26 января 2012

Вы пытаетесь передать переменную bash (фактически, две) в подпрограмму (sed), но окружаете выражение, которое вы передаете в одинарных кавычках, что не приводит к расширению параметров. Это означает, что sed буквально видит $Title:$Author. Попробуйте поместить все выражение sed в двойные кавычки:

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

Это позволит bash расширить $Title и $Author, прежде чем они попадут в sed.

1 голос
/ 26 января 2012

Использование одинарных кавычек не интерполирует переменные. Попробуйте что-то вроде этого -

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...