2015-09-19 32 views
2

我正在向網頁發送一些bash輸出,但它包含過量的\ n,\ r和^ M個字符。例如,一行可能以\ r \ n結尾,然後下一行將包含^ M^M並且沒有文本。刪除這些額外字符的最佳方法是什麼,而每行之後仍有換行符?刪除過多的退貨和換行

目前有JS取代多個換行符和返回字符與一個單一的,但是這並不包括只有返回字符的行。另外,我不確定JS如何看到^ M和^ G這樣的字符。輸出通過Python子收集併發送一個Ajax功能作爲一個HttpResponse(使用Django作爲框架)

的JavaScript:

data = data.replace(/(?:\r\n|\r|\n|\r\n\r|\n\n|\r\r|\n\r)/g, '<br>'); 

原始文本

Connection to node1 closed.^M^M 
Connection to fsgvc11 closed.^M^M 
Rebooting node7^M 
^G^M^M 
Broadcast message from root (pts/0) (Sat Sep 19 16:10:09 2015):^M^M 
^M^M 

它的外觀在終端

Connection to node1 closed. 
Connection to fsgvc11 closed. 
Rebooting node7 

Broadcast message from root (pts/0) (Sat Sep 19 16:10:09 2015): 

它的外觀在瀏覽器:

Connection to node1 closed. 

Connection to fsgvc11 closed. 

Rebooting node7 


Broadcast message from root (pts/0) (Sat Sep 19 16:10:09 2015): 
+0

你現在的JavaScript是什麼樣的? –

+0

要替換它的位使用正則表達式: 'data = data.replace(/(?:\ r \ n | \ r | \ n | \ r \ n \ r | \ n \ n | \ r \ r | \ n \ r)/ g,'
');' – sirstancake

+1

好的,我在問題中加了這個。 –

回答

1

它是bash還是python?我沒有得到它,因爲你在談論python,但你的標籤說bash。

也許它只是幫助你能夠進入^ M標誌使用CTRL + V Ctrl + M鍵取代它在bash腳本像

echo $myvar | sed 's/^M//g' 

你可以將其插入即VIM。

+0

那麼它是一個從python調用的bash腳本。就像我說的,我使用Django作爲我的web框架。 ajax調用一個python函數,最終調用bash腳本,使用子進程模塊收集stdout,並將其發回。就你的建議而言,不可能導致換行符的丟失?在給出的例子中,這將在^ M個字符處刪除,這樣最終都會成爲單行,還是我誤解? – sirstancake

+0

請注意,使用'echo $ myvar'會導致bash刪除所有換行符。如果你不想要這個,把'$ myvar'放在雙引號中。 – John1024

+0

取決於您提供內容的方式。^M只是去除^ M後仍然存在的\ n \ r的一個符號。 – inbaz

1

vim(和一些其他編輯器)顯示回車爲「^ M」,但它們仍然是回車符。

$ echo $'a\nb\r\nc\rd' >test 

如果通過vim test一下測試,你會看到

a b^M c^Md

如果您是通過什麼呈現\r看的話,你會看到

$ cat test a b d

要通過bash修復此問題:

$ cat test | tr '\r' '\n' > test2 

查看文件通過vim vim test2和瞧,所有不好的^M的都走了。