【问题标题】:sed won't delete what I want [duplicate]sed 不会删除我想要的 [重复]
【发布时间】:2014-10-09 06:44:56
【问题描述】:

我正在编写一个 bash shell 脚本,并在其中尝试从文本文件中删除 2 个标记之间的行

START
...
...
END

一定要消除这个,我尝试了一些方法,但每次都将我的文本文件留空。

sed '/START/,/END/d' myfile.txt > myfile.txt

sed '/START/d' myfile.txt > myfile.txt

只要我的代码中有一个 sed 命令,我的整个文件就会被擦除,而不仅仅是我要擦除的部分。

【问题讨论】:

  • 它是重复的,但我在搜索时找不到这个问题,因为我没有搜索正确的关键字。但现在一切都解决了。谢谢
  • 声明的副本不是副本,操作的问题是它在命令之后覆盖(我几乎使用也是一个副本)

标签: bash shell sed


【解决方案1】:

您无法重定向到正在阅读的文件。如您所见,这将删除您文件的内容。

相反,要么重定向到不同的文件,要么就地编辑:

sed -i ... myfile.txt

【讨论】:

    【解决方案2】:

    您将stdout 重定向到与stdin 相同的文件。当您执行此操作时,您的重定向被解释为购买 shell 并打开一个新文件以使用该名称进行写入。您的现有文件将被新创建的空白文件覆盖。您需要将输出重定向到不同的文件,或者您可以使用 -i 选项编辑文件到 sed

    【讨论】:

    • 我之前做过这个,但是没有用。但是现在我已经更改了输出文件,它可以完美运行。我根本无法让-i 标志工作。我会得到一个错误,指出文件名的第一个字母是一个不正确的命令。无论如何它现在正在工作,感谢您的建议。
    【解决方案3】:

    awk 中的一种方式。

    awk '/START/{x=1}/END/{x=0}!x{print > ARGV[1]}' myfile.txt
    

    便携

    awk '/START/{x=1}/END/{x=0}!x{print > "myfile.txt"}' myfile.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 2021-12-11
      • 2016-07-26
      • 2022-01-14
      • 2022-10-18
      • 2021-06-11
      • 1970-01-01
      相关资源
      最近更新 更多