【问题标题】:Linux remove text from fileLinux从文件中删除文本
【发布时间】:2013-02-25 16:59:40
【问题描述】:

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

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

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

【问题讨论】:

标签: linux shell unix grep


【解决方案1】:

就这么简单-

path="$HOME/.todolist"
grep -v $1 $path | sponge $path

【讨论】:

    【解决方案2】:

    这可能更简单:

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

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

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

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

    【讨论】:

      【解决方案3】:
      path="$HOME/.todolist"
      if [ "$task" == "- " ];
      then 
          exit 1
      fi 
      a=$1
      export a
      
      perl -pi -e 'undef $_ if(/$ENV{a}/)' $path
      

      【讨论】:

        猜你喜欢
        • 2020-10-14
        • 1970-01-01
        • 2015-07-30
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 2018-01-16
        相关资源
        最近更新 更多