1

我想编写一个命令,从这样的文件中删除一个项目.todolist

path="$HOME/.todolist"
if [ "$task" == "- " ];
then 
    exit 1
fi 
cat $path | grep -v $1 > $path

当我cat $path | grep -v $1一切正常时,但是当我尝试写回文件时,它使文件为空。我究竟做错了什么?

4

3 回答 3

1

这可能更简单:

sed -ie "/$1/d" $path

这将删除文件中包含 $1 中的值的任何行。-i 选项告诉 sed 在适当的位置编辑文件(不是真的,但它就像它一样工作)。如果 $1 包含 /s 你会得到一个错误,但如果你需要,你可以使用其他分隔符:

sed -ie "\%$1%d" $path

请注意,使用备用分隔符时,您必须使用“\”转义第一个分隔符。

于 2013-02-25T22:06:29.450 回答
1

就如此容易-

path="$HOME/.todolist"
grep -v $1 $path | sponge $path
于 2013-02-25T17:25:52.253 回答
0
path="$HOME/.todolist"
if [ "$task" == "- " ];
then 
    exit 1
fi 
a=$1
export a

perl -pi -e 'undef $_ if(/$ENV{a}/)' $path
于 2013-02-26T02:04:58.823 回答