警告:这是一种危险的方法!它滥用了Linux中的I / O缓冲区,并通过特定的缓冲区选项设法处理小文件。这是一个有趣的好奇心。但是不要在实际情况下使用它!
除了-i
选项之外,sed
您还可以使用该tee
实用程序。
来自man
:
tee-从标准输入读取并写入标准输出和文件
因此,解决方案将是:
sed s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html | tee | tee index.html
-在这里tee
重复以确保管道被缓冲。然后,管道中的所有命令都将被阻塞,直到它们得到一些输入以进行处理。当上游命令已将1个字节缓冲区(大小在某处定义)写入命令输入时,管道中的每个命令就会启动。因此,最后一个命令tee index.html
(打开文件以写入并清空文件)将在上游管道完成并且输出在管道内的缓冲区中之后运行。
以下情况很可能不起作用:
sed s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html | tee index.html
-它将同时运行管道的两个命令,而不会发生任何阻塞。(不会阻塞管道应该由缓冲区传递由行而不是缓冲区的字节线。同样,你在运行时的cat | sed s/bar/GGG/
。如果没有阻挡它的互动性更强,通常只有2命令的管道没有缓冲和阻挡运行,较长的管道中缓存。)的tee index.html
意志打开文件进行写入,它将被清空。但是,如果您始终打开缓冲,则第二个版本也将起作用。
perl -pi -w -e 's/STRING_TO_REPLACE/REPLACE_WITH/g;' index.html