便携式使用

就地编辑虽然常见,但却是一种非标准功能。一个可行的替代方案是使用中间文件来存储原始文件或输出。

sed 'sed commands' > file.out && mv file.out file
# or
mv file file.orig && sed 'sed commands' file.orig > file

要将 -i 选项与 GNU 和 FreeBSD 语法一起使用,必须指定扩展名并将其附加到 -i 选项。以下内容将被两者接受,并生成两个文件,file.orig 的原始版本和 file 的编辑版本:

sed -i.orig 'sed commands' file

查看文件 file 的基本示例:

$ cat file
one
two
three
$ sed -i.orig 's/one/XX/' file
$ cat file                       # the original file has changed its content
XX
two
three
$ cat file.orig                  # the original content is now in file.orig
one
two
three

一个更复杂的例子,用行号替换每一行:

$ printf 'one\ntwo\n' | tee file1 | tr a-z A-Z > file2
$ sed -ni.orig = file1 file2
$ cat file1.orig file2.orig
one
two
ONE
TWO
$ cat file1 file2
1
2
1
2

为什么需要备份文件

为了在没有备份文件的情况下使用就地编辑,-i 必须被赋予零长度参数,而 FreeBSD sed 需要 -i 的参数,无论是附加还是单独,而 GNU 可选参数扩展要求将参数附加到 -i。两者都支持将参数附加到 -i,但如果不需要它,则 -i'' command-i extension 无法区分,因此零长度参数不能附加到 -i