在 Linux 中动态更改文件(写入管道上的输入文件)

Ale*_*lex 7 linux pipe

如何沿管道动态更改文件?

我可能正在寻找一种在管道开头缓冲文件的方法,与此相反:

    cat foo.txt | grep bar > foo.txt
Run Code Online (Sandbox Code Playgroud)

... 将保护输入数据不被管道本身破坏。库存有这样的缓冲吗?

Sek*_*nre 13

尝试使用moreutils 中的海绵,如下所示:

sed "s/root/toor/" /etc/passwd | grep -v joey | sponge /etc/passwd
Run Code Online (Sandbox Code Playgroud)

它在写入输出之前收集整个输入。


Kyl*_*ndt 6

我猜 sed 仍然可能会创建临时文件,但以下内容可能会满足您的需求?(在此使用 strace 可能会告诉您 sed 是否创建了临时文件)。

sed -i '/bar/!d' foo.txt
Run Code Online (Sandbox Code Playgroud)

感叹号反转匹配,d 用于删除,因此这将删除所有没有 bar 的行。