2013-02-14 65 views
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/^.*] //' 
+1

如果我們看到一些示例輸出以及您試過的東西,我們可以提供幫助:) – squiguy 2013-02-14 08:47:27

回答

1

是,sed作爲流編輯器應這項工作的正確工具。只要你的應用程序的輸出重定向到它:

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

可能遇到的問題,雖然:

  1. 如果應用程序寫入比標準輸出標準錯誤rahter,您必須將流重定向與

    myapp 2> & 1 | sed -e ...

  2. 如果應用程序未連接到終端,則可能會緩衝其輸出。除非有特別的選擇來改變行爲,否則在這種情況下你是不走運的。

+0

Wrt。 2.我認爲你可以用'stdbuf'修改行爲。 – Thor 2013-02-14 09:19:28

+0

優秀! 「2>&1 | sed -e」命令做到了。謝謝! – conan 2013-02-14 17:48:56