在Shell中的grep匹配上从.text行中删除一行

时间:2014-04-02 15:50:30

标签: bash shell

所以我对Shell脚本很新,并尝试构建一个从.txt文件中删除一行的函数。

要明确我希望能够运行以下命令

$ ./script.sh searchTerm delete

哪个应该找到包含' searchTerm'并删除它。

我将$ 1(捕获searchTerm)传递给deletePassword函数但似乎无法使其工作。

会喜欢一些建议:)

#Delete a password
if [[ $2 == "delete" ]]; then
    deletePassword $1
fi

function deletePassword () {
    line=grep -Hrn $1 pwstore.txt
    sed -n $line pwstore.txt 
    echo "Deleted that for you.."
}

运行上一个命令时出现以下错误:

sed: 1: "pwstore.txt": extra characters at the end of p command

1 个答案:

答案 0 :(得分:2)

您的line变量未按预期设置,因为您需要使用command substitution来捕获此类命令的结果。例如:

line=$(grep -Hrn $1 pwstore.txt)

我建议只使用sed代替:

sed -i.bak "/$1/d" pwstore.txt

这将删除与pwstore.txt中$1中存储的字符串匹配的所有行(并在pwstore.txt.bak创建原始文件的备份)