2012-07-09 129 views
1
cat report.txt | sed 's/<\/li>/<\/li> \n/g' > report.txt 

这显然会导致一个空文件。BASH,cat缓冲区

是否有一种机制允许您在处理数据之前存储数据或存储输出,直到命令完成执行并写入文件?

http://en.wikipedia.org/wiki/Pipeline_(Unix)#Implementation:。

” ...接收程序可能仅能够接受每秒100个字节,但没有数据丢失而是,发送程序的输出在队列中保持当接收程序已准备好读取数据,操作系统将从队列中发送数据,然后从队列中删除该数据。“

听起来像应该有一个简单的技巧来加载到队列中,而不是立即写入文件,然后在命令完成后卸载它?

非常感谢!

回答

2

你需要的是编辑in place

sed -i 's/<\/li>/<\/li> \n/g' report.txt 
+0

这是可行的。 我想通了: 'echo“$(cat [file] | cmd1 | cmd2)”> [file]' 同样适用,因为子shell首先执行。 – pnovotnak 2012-07-09 17:11:02