警告:这是一种危险的方法!它滥用 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
意志打开文件进行写入,它将被清空。但是,如果您始终打开缓冲,则第二个版本也可以使用。