【问题标题】:What does sed -i option do?sed -i 选项有什么作用?
【发布时间】:2013-09-02 20:32:49
【问题描述】:

我正在调试一个 shell 脚本并试图找出以下命令执行的任务:

sed -i '1,+999d' /home/org_user/data.txt

我需要更改此命令,因为它失败并出现以下错误:

illegal option sed -i

但在改变之前,我需要了解 BAU 的功能。

感谢您在这方面的任何意见。

【问题讨论】:

  • 这个命令很可能使用 GNU 的 sed 命令实现。可以使用大多数 sed 复制它:sed '1,1000d' file >temp_file && mv temp_file file
  • 您好,感谢您的意见,我同意您指出的命令。但是,您能建议一下 '1,+999d' 到底是做什么的吗?我阅读了以下答案,他们建议它“应该”删除从 1 到 999 的行。但是,我想确定一下。
  • sed 中的 '1,+999d' 表示从第 1 行到第 1+999 行删除。剩余文件将少于前 1000 行。
  • 非常感谢。由于 -i 选项失败,将以单独的方式处理该场景。感谢及时回复.. :)

标签: unix sed command-line option


【解决方案1】:

如果给定-i 选项,sed 就地编辑文件。

   -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if extension supplied)

来自 sed(1)

http://www.gnu.org/software/sed/manual/sed.html#Introduction

【讨论】:

  • Philip Kirkbride 的回答提供了一个有用的示例,更好地解释了“就地编辑文件”的实际含义意味着
【解决方案2】:

sed 的某些实现不支持-i 选项。它的作用可以被模拟

sed -e '...' file > tmp
mv tmp file

【讨论】:

  • 感谢您的意见。所以在这里, '1,+999d' 给出了一个错误,说 "garbled text" 。此命令是否从文件中删除所有行??
  • @Allzhere:它应该删除第 1 到 999 行。我不确定所有 seds 都支持+
  • @choroba 删除第 1 到 1+999=1000 行。它也是一个 GNU 扩展。
  • @Allzhere 删除所有行:1,$d.
【解决方案3】:

它的适用用途如下。假设您有以下文件file.txt

1, 2, 6, 7, "p" 

我们想用 0 替换“p”。

sed 's/"p"/0/g' file.txt

使用上面的方法只是将输出打印到命令行中。

你会想为什么不直接将文本重定向回文件,如下所示:

sed 's/"p"/0/g' file.txt > file.txt

不幸的是,因为the nature of redirects,上面只会产生一个空白文件。

相反,必须为输出创建一个临时文件,该文件稍后会覆盖原始文件,如下所示:

sed 's/"p"/0/g' file.txt > tmp.txt && mv tmp.txt file.txt

与使用 -i 的 sed 就地编辑选项相比,使用更简单的命令代替了上述冗长的解决方法:

sed -i 's/"p"/0/g' file.txt

【讨论】:

  • sed -i 's/"p"/0/g' file.txt 返回 error_code 1sed: 1: "file.txt": invalid command code k :(
猜你喜欢
  • 2021-09-24
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 2015-01-12
  • 2012-02-29
  • 1970-01-01
相关资源
最近更新 更多