从特定变量中删除一行

时间:2016-12-09 21:08:42

标签: bash sed

使用sed我可以在命令提示符下删除一行代码。当我在bash脚本中使用它并使用变量时它不会删除它。

function remove_user {
echo "Input user you would like to delete"
read rui
if grep -q  $rui database.txt ;
then
    echo "Are you sure yu want to delete this user?"
    echo "(Y/N)"
    read input3
    if [ $input3 == "Y" ] || [ $input3 == "y" ] ;
    then

            sed -i '/"$rui"/d' ./databse.txt
            echo "User Deleted"
            echo "returning to the main menu..."
            echo "$rui"
            #sleep 1 ; clear

    elif [ $input3 == "N" ] || [$input3 == "n" ] ;
    then
            echo "returning to main menu..."
            sleep 1 ; clear
    else
            echo "input invalid"
            echo "returning to main menu..."
            sleep 1 ; clear
    fi
 else
    echo " user not found"
    echo "returning to main menu..."
    sleep 1 ; clear
fi

我的数据库看起来像这样

拉里:Larry@hotmail.com:拉里鲍勃:ATC:4.0

不确定问题是什么,因为代码不适用于变量

1 个答案:

答案 0 :(得分:1)

您需要通过简单地退出单引号分隔的sed脚本,使变量对shell可见。你可以通过在变量之前添加一个终止的单引号,然后在它之后再次添加一个单引号来实现:

sed -i '/'"$rui"'/d' ./databse.txt

您不必在整个脚本周围使用双引号的原因是,当shell解释您的整个脚本而不仅仅是您想要扩展的变量时,会让您惊喜不已。 e.g:

$ echo "money is nice" | sed 's/money/$$/'
$$ is nice

$ foo="money"; echo "money is nice" | sed 's/'"$foo"'/$$/'
$$ is nice

$ foo="money"; echo "money is nice" | sed "s/$foo/$$/"
6756 is nice

最后一个发生是因为双引号在sed看到它之前将你的整个脚本暴露给shell,而shell将$$解释为当前的PID。