将输出从sed的/ c/d /'myFile重定向到myFile

six*_*ude 18 bash redirect solaris sed

我在脚本中使用sed进行替换,我想让替换的文件覆盖该文件.通常我认为你会使用这个:

% sed -i 's/cat/dog/' manipulate
sed: illegal option -- i
Run Code Online (Sandbox Code Playgroud)

但是你可以看到我的sed没有那个命令.

我试过这个:

% sed 's/cat/dog/' manipulate > manipulate
Run Code Online (Sandbox Code Playgroud)

但这只是将操作转换为空文件(有意义).

这有效:

% sed 's/cat/dog/' manipulate > tmp; mv tmp manipulate
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一种标准方法可以将输出重定向到输入的同一文件中.

Nat*_*idd 37

我通常使用第三种方式,但有一个重要的变化:

$ sed 's/cat/dog/' manipulate > tmp && mv tmp manipulate

即改变;,&&所以只有在sed成功时才会发生移动; 一旦你在你的sed语法中输入拼写错误,你就会丢失原始文件.

注意!对于那些阅读标题并且缺少OP的约束"我的sed不支持-i"的人:对于大多数人来说,sed会支持-i,所以最好的方法是:

$ sed -i 's/cat/dog/' manipulate


小智 8

是的,-iFreeBSD/MacOSX也支持sed,但需要空字符串作为参数来就地编辑文件.

sed -i "" 's/old/new/g' file   # FreeBSD sed
Run Code Online (Sandbox Code Playgroud)


ame*_*une 6

如果您不想移动副本,可以使用ed:

ed file.txt <<EOF
%s/cat/dog/
wq
EOF
Run Code Online (Sandbox Code Playgroud)