Linux从文件中删除文本

时间:2013-02-25 16:59:40

标签: linux shell unix grep

我想编写一个命令,删除文件.todolist中的项目,如下所示:

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

当我cat $path | grep -v $1完成所有工作时,但当我尝试写回文件时,它会将文件留空。我做错了什么?

3 个答案:

答案 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