【问题标题】:Delete a line using SED from a file and redirect the output to same file使用 SED 从文件中删除一行并将输出重定向到同一文件
【发布时间】:2014-05-23 21:04:45
【问题描述】:

我使用 sed 命令从文件中删除前两行和最后一行,我想将输出重定向到 SAME 文件

示例:

sed '1,2d' '$d' pra >pra

这会从文件中删除前两行和最后一行。但是当我尝试将输出重定向到同一文件时,会出现问题。

当我打开并看到重定向的文件 pra 时,文件中没有任何内容。

是否有更好的方法来做到这一点..从文件中删除前两行和最后一行并使用相同的文件名保存它。

【问题讨论】:

  • 改用sed -i '1,2d' ...
  • 许多问题会告诉您读取和写入同一个文件会截断它。
  • @DEVNULL 我正在使用 Solaris 10 并且在 kshell 中工作,这是一个非法的选项。
  • @devnull 有没有更好的方法,即使用任何其他选项
  • 当您说command > file 时,文件会立即被截断并打开以进行写入,甚至在命令执行之前。

标签: unix sed solaris ksh


【解决方案1】:

要将输出保存到同一文件,请使用 --in-place 或 -i 修饰符。

例如

sed -i options_you_want name_of_file_to_change

这比重定向到临时文件,然后返回原始文件要简洁得多。

如下所述,--in-place 可能在 Solaris 上不可用...

【讨论】:

  • 不相信 Solaris 默认提供就地选项
【解决方案2】:

这在 Solaris 10 上是不可能的,除非您将 GNU sed 作为可选包安装​​。无论如何,使用中间文件并将 -i 选项与备份文件一起使用是最安全的。

在 Solaris 10 上,您可以这样做:

sed '1,2d; $d' file > file.new && mv file.new file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 2023-03-08
    • 2023-03-30
    相关资源
    最近更新 更多