0

基本上,我想做的是从文件中删除一行。用户输入一个搜索字符串,然后程序搜索除搜索字符串之外的所有内容,然后将其存储在文件中。这是我的代码:

elif [ $res -eq "2" ] 
then
     echo "Enter phrase to delete: "
     read -e deletestr
     d=`cat phonebook | grep -v $deletestr`
     echo $d > phonebook

当我运行脚本时,它总是清空电话簿文件。为什么是这样?

4

3 回答 3

4

我建议要么创建一个文件,然后在完成删除后替换旧文件,要么使用诸如sed -i可以就地编辑文件的工具。

就像是:

grep -v "foo" phonebook > phonebook.new
mv phonebook.new phonebook

或者

sed -i '/foo/d' phonebook
于 2012-05-02T00:07:42.167 回答
1

如果要编辑文件,可以使用编辑器

ex phonebook << DONE
g/$delstring/d
x
DONE
于 2012-05-02T00:28:14.060 回答
0

使用>>而不是>将标准输出附加到文件中。

如果您想了解有关 I/O 重定向的更多信息,这是一个很好的指南:http ://tldp.org/LDP/abs/html/io-redirection.html

于 2012-05-01T23:58:46.870 回答