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