sed便携使用

示例

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

sed 'sed commands' >file.out&& mvfile.outfile
# or
mv filefile.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                       #原始文件已更改其内容
XX
two
three
$ catfile.orig                 #原始内容现在在 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必须给它一个零长度的参数,并且FreeBSDsed要求将一个参数-i附加或分开,而GNU可选参数扩展要求将参数附加到-i。两者都支持将参数附加到-i,但不需要将其-i'' command与区别开-i extension,因此不能将零长度参数附加到-i。