0

我正在从终端运行一个应用程序(CoronaSDK Simulator),该应用程序在每一行输出前面都放置了一个非常长的时间戳。

有没有办法使用 sed 之类的东西来切断它,而不是在它进来时输出其他所有东西(即不必等到程序结束)?

我已经尝试了几件事,但到目前为止没有运气......

以下是一些示例行:

2013-02-14 12:39:49.028 Corona Simulator[40803:707] |timer created
2013-02-14 12:39:49.029 Corona Simulator[40803:707] __in deck.lua__
2013-02-14 12:39:49.030 Corona Simulator[40803:707] storyboard.roomData.layout=A1 (room.lua)

我想看起来像这样:

|timer created
__in deck.lua__
storyboard.roomData.layout=A1 (room.lua)

我试过了

coronasim ./ | sed 's/Corona Simulator//'

作为测试,和

coronasim ./ | sed -e 's/^.* //'

如下所示,甚至

coronasim ./ > /dev/null

但似乎没有任何改变输出。

解决方案是这样的:

coronasim ./ 2>&1 | sed -e 's/^.*] //'

根据下面 choroba 的建议。似乎 Corona SDK 模拟器将输出发送到 stderr 而不是 stdout。

对于其他感兴趣的人,创建了一个简单的 bash 脚本,在模拟器的当前导向器中运行该程序,去除时间戳:

/Applications/CoronaSDK/Corona\ Simulator.app/Contents/MacOS/Corona\ Simulat
or ./ 2>&1 | sed -e 's/^.*] //'
4

1 回答 1

1

是的,sed作为流编辑器应该是适合这项工作的工具。只需将应用程序的输出重定向到它:

myapp | sed -e 's/^.* //'

但是,您可能会遇到问题:

  1. 如果应用程序写入标准错误而不是标准输出,则必须使用重定向流

    我的应用程序 2>&1 | sed -e ...

  2. 如果未连接到终端,应用程序可能会缓冲其输出。除非有一个特定的选项来改变行为,否则在这种情况下你很不走运。

于 2013-02-14T09:10:00.110 回答