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