sed -i 选项有啥作用?

Posted

技术标签:

【中文标题】sed -i 选项有啥作用?【英文标题】: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 选项失败,将以单独的方式处理该场景。感谢及时回复.. :) 【参考方案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 :(

以上是关于sed -i 选项有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg 命令中的“破折号”选项有啥作用?

Mathematica 中这些未记录的样式选项有啥作用?

JQuery 自动完成中的 formatResult 和 formatItem 选项有啥作用?

Node.js express-session 代理选项有啥作用?

文件、编辑、选项等菜单在 Emacs 23 上不起作用,有啥想法吗?

clang++ 的选项 -fno-strict-enums 有啥作用?