我正在为非技术性观众准备一个演讲。我有一个在bash中运行的程序,该程序输出连续的值流,其中一些很重要。我想突出显示重要结果,以便观众了解他们的频率。问题是我无法sed
在正在运行的流上进行操作。如果将结果放入文件中,效果很好,如下所示:
cat output.txt | sed "s/some text/some text bolded/"
但是,如果我在运行的输出上尝试相同的操作,如下所示:
command | sed "s/some text/some text bolded/"
sed
什么也没做。有什么想法吗?
正如兰伯特(Lambert)很有帮助地指出的那样,我的说法sed
是无所适从。发生的事情是,即使程序通过管道输出,程序也会照常输出到stdout
(我很确定它没有写到stderr
)sed
。
问题似乎是该命令调用了第二个程序,然后将其输出到stdout。第一个程序打印了几行;这些我可以编辑。然后有第二个程序打印的值流;这些我无法编辑。
Perl和awk方法也不起作用。
使用“ sed什么都不是”,您的意思是未进行替换,或者您没有任何输出?该命令可能正在写入stderr而不是stdout?如果您想突出显示某些内容,可以使用
—
Lambert
command|egrep 'some text|$'
命令是否写到stdout(而不是stderr)?
—
Anthon 2015年
鉴于文本不止一次出现,您应该添加一个
—
ph0t0nix
g
“全局”替换,否则仅替换一行中的第一个匹配项:sed "s/old/new/g"
@ ph0t0nix不,这不是问题,但是这可能是一个问题。谢谢你的提示。
—
P琼斯
stdbuf -o0 command | sed "s/some text/some text bolded/"
工作吗?