sed可以将其输出保存到文件吗?


33

> 可以做到。

echo "text" > file

tee 可以做到。

echo "test" | tee file 

可以sed不使用上述任何一种方法来做到吗?是否可以在sed不使用>或的情况下将命令的输出保存到文件中tee


在此处发布问题之前,请尝试自己找到答案。我们要求用户的第一件事是在发布之前进行搜索和研究。您需要做的就是sed '' file > newfile,您会发现它>确实可以sed与任何其他程序一起使用。
terdon

1
那仍然在使用>运算符。我很感兴趣是否有sed命令可以代替使用。但是,如果问题很严重,我将删除此问题。
佛拉特

嗯对 好,那是一个非常不同的问题。自您接受sed -i答案以来,我将编辑您的问题并阐明您的要求。
terdon

我接受“ sed 并不意味着要进行数据重定向,tee>(应该)这样做”。
佛拉特

Answers:


49

tee和>可用于数据重定向,因为它们旨在用于linux中的数据重定向。

sed是流编辑器。sed不像tee和>那样用于数据重定向。但是,您可以使用命令结合来执行此操作。

与sed一起使用tee或>

sed 's/Hello/Hi/g' file-name | tee file

要么

sed 's/Hello/Hi/g' file-name > file

与-i选项一起使用sed

sed -i 's/Hello/Hi/g' file-name

最后一个不重定向,而是对文件本身进行更改。


2
谢谢。你明白我的问题。所以答案是否定的。我以为sed它自己可以做到,因为它还可以使用该-i.bak选项创建备份文件。
弗拉特

2
正确。另外-i.bak不是固定选项,您可以使用任何您希望备份文件具有的扩展名。对于前。-i.log也将起作用。:)
ankidaemon '16

我只是想添加实际上在寻找的东西echo "test" | dd of=file status=none,而不使用模糊的输出重定向来抑制回声的输出2> /dev/null,而是询问sed的限制。sed的能力给我留下了深刻的印象,因为它能够在文件中追加行,给我的印象是sed可以完成tee可以做的任何事情以及更多。
佛拉特

11

sed具有w可能满足您要求的命令:

w文件名

将当前模式空间写入文件名。

sed 'w file'单独具有与相同的效果tee file。如果还有其他sed命令,请放在w最后:

sed 's/This/That/;w file'

但是,这不会受到该-n/--quiet/--silent选项的影响。那只会抑制原本可以输出到标准输出的内容。


0

正如ankidaemon正确指出的那样,我们如何将sed输出保存到文件中。我想补充一点,如果我们正在对文件执行某些操作,即替换并希望将输出保存到同一文件。有一个-i标志,sed可以进行就地编辑。但是,这会在此过程中创建一个备份文件。如果不需要,只需将空文件名传递给-i标志即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.