56

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

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

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

illegal option sed -i

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

感谢这方面的任何投入。

4

3 回答 3

100

它的适用用途如下。假设您有以下文件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

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

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

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

而不是在 sed edit in place 选项上使用 -i 进行长时间的解决方法,而是允许使用更简单的命令:

sed -i 's/"p"/0/g' file.txt
于 2017-03-06T16:17:49.727 回答
19

如果-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

于 2013-08-30T07:34:37.233 回答
7

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

sed -e '...' file > tmp
mv tmp file
于 2013-08-30T07:38:19.310 回答