我正在从终端运行一个应用程序(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/^.*] //'
答案 0 :(得分:1)
是的,sed
作为流编辑器应该是正确的工作工具。只需将应用程序的输出重定向到它:
myapp | sed -e 's/^.* //'
但您可能会遇到问题:
如果应用程序写入标准错误rahter而不是标准输出,则必须使用
重定向流myapp 2>& 1 | sed -e ...
如果应用程序未连接到终端,应用程序可能会缓冲其输出。除非有特定的选项来改变行为,否则在这种情况下你运气不好。