我想编写一个命令,删除文件.todolist
中的项目,如下所示:
path="$HOME/.todolist"
if [ "$task" == "- " ];
then
exit 1
fi
cat $path | grep -v $1 > $path
当我cat $path | grep -v $1
完成所有工作时,但当我尝试写回文件时,它会将文件留空。我做错了什么?
答案 0 :(得分:1)
就这么简单 -
path="$HOME/.todolist"
grep -v $1 $path | sponge $path
答案 1 :(得分:1)
这可能更简单:
sed -ie "/$1/d" $path
这将删除包含$ 1值的文件中的任何行。 -i选项告诉sed在适当的位置编辑文件(不是真的,但它的工作原理就像它一样)。如果$ 1包含/ s,您将收到错误,但如果需要,您可以使用其他分隔符:
sed -ie "\%$1%d" $path
请注意,使用备用分隔符时,必须使用“\”转义第一个分隔符。
答案 2 :(得分:0)
path="$HOME/.todolist"
if [ "$task" == "- " ];
then
exit 1
fi
a=$1
export a
perl -pi -e 'undef $_ if(/$ENV{a}/)' $path