sed -i选项有什么作用?

All*_*ere 29 unix command-line sed option

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

sed -i '1,+999d' /home/org_user/data.txt
Run Code Online (Sandbox Code Playgroud)

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

illegal option sed -i
Run Code Online (Sandbox Code Playgroud)

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

感谢这方面的任何投入.

Phi*_*ide 52

其适用用途如下.假设您有以下文件file.txt:

1, 2, 6, 7, "p" 
Run Code Online (Sandbox Code Playgroud)

我们想用0代替"p".

sed 's/"p"/0/g' file.txt
Run Code Online (Sandbox Code Playgroud)

使用上面的命令只需将输出打印到命令行.

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

sed 's/"p"/0/g' file.txt > file.txt
Run Code Online (Sandbox Code Playgroud)

不幸的是,由于重定向的性质,上面只会产生一个空白文件.

而是必须为输出创建一个临时文件,稍后将覆盖原始文件,如下所示:

sed 's/"p"/0/g' file.txt > tmp.txt && mv tmp.txt file.txt
Run Code Online (Sandbox Code Playgroud)

而不是使用上面的长期解决方法使用-i进行sed编辑选项允许使用更简单的命令:

sed -i 's/"p"/0/g' file.txt
Run Code Online (Sandbox Code Playgroud)

  • 我真的很喜欢这个答案! (2认同)
  • 这可能是 BSD `sed`。您应该通过 `sed -i '' ' s/"p"/0/g' file.txt'` 在这里指定“无地址”,请参阅 `man sed` 了解有关您的发行版的更多信息 (2认同)

fal*_*tru 9

如果-i给出选项,则sed编辑文件.

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

          edit files in place (makes backup if extension supplied)
Run Code Online (Sandbox Code Playgroud)

来自sed(1)

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

  • Philip Kirkbride 的回答给出了一个有用的例子,它更好地解释了“就地编辑文件”实际上是什么意思。 (2认同)

cho*_*oba 6

的某些实现sed不支持该-i选项。它的作用可以通过以下方式模拟

sed -e '...' file > tmp
mv tmp file
Run Code Online (Sandbox Code Playgroud)