便携式使用
就地编辑虽然常见,但却是一种非标准功能。一个可行的替代方案是使用中间文件来存储原始文件或输出。
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
。