2012-06-06 146 views
3

輸出的格式相同,只不過在使用python時,輸出會在每個字符串之間添加一個新行。任何想法爲什麼以及如何使用sed來做到這一點?sed替換與python替換

sed 's:\x01: | :g' 

01.06.2012 07:51:55.135 | 3732 | INFO | xxx | 8=FIX.4.2 | 9=157 | 35=V | 56=xxx | 49=xxx | 52=20120601-07:51:54 | 34=40 | 262=VMD1338537114945 | 263=1 | 264=0 | 265=1 | 
01.06.2012 07:51:55.135 | 3732 | INFO | xxx | 8=FIX.4.2 | 9=157 | 35=V | 56=xxx | 49=xxx | 52=20120601-07:51:54 | 34=41 | 262=VLT1338537114945 | 263=1 | 264=1 | 265=1 | 

for line in sys.stdin: 
    print line.replace("\01", " | ") 


01.06.2012 07:51:55.135 | 3732 | INFO | xxx | 8=FIX.4.2 | 9=157 | 35=V | 56=xxx | 49=xxx | 52=20120601-07:51:54 | 34=40 | 262=VMD1338537114945 | 263=1 | 264=0 | 265=1 | 

01.06.2012 07:51:55.135 | 3732 | INFO | xxx | 8=FIX.4.2 | 9=157 | 35=V | 56=xxx | 49=xxx | 52=20120601-07:51:54 | 34=41 | 262=VLT1338537114945 | 263=1 | 264=1 | 265=1 | 
+0

你可以發佈輸入文件,所以我們有什麼可玩嗎? – mgilson

+0

@mgilson它不應該很難生產;獲取他發佈的輸出並通過'sed's/|運行它/ \ x01/g' –

回答

2

添加第二個替換,用換行符替換行的末尾:s/$/\n/。既然你有兩種模式,現在,你需要使用-e

sed -e 's:\x01: | :g' -e 's/$/\n/' 
+0

呵呵 - 現在我記得我習慣性地使用'-e'和sed。 ;)(+1) – mgilson

+0

這隻有當我在第二個命令的末尾添加了一個/ g時才起作用。 – user1440188

+0

@ user1440188它應該沒關係; 'g'允許模式在一行中匹配多次 - 只有一行匹配 –

0

打印增添了新的生產線 試試這個,而不是

sys.stdout.write(line.replace("\01"," | ")) 
+0

我認爲用戶想要使用sed的換行符 - 不是一種方法來抑制它 – mgilson

+0

哦哎呀..​​.呃抱歉誤讀了這個問題,不知道如何用sed來做:( –

+0

sed -e 's:\ x01:|:g'-e's:$:\ n:g'工作過!我需要/ g,沒有它時我沒有輸出。 – user1440188

2

我不是一個sed大師,但你可以在每行的末尾在sed使用下面添加一個新行:

sed -e 's/$/\n/g' 

這可行,因爲$匹配一行的結尾。請注意,您可以將多個sed命令與-e(請參閱Michael Mrozek指出 - 請參閱man sed瞭解更多信息)一起使用。

+0

所以完整的命令將是:'sed's:\ x01:|:g'| sed -e's/$/\ n'' –

+0

不需要'/ g'全局指示符,因爲只有一個替換注意:我從來沒有使用sed –

+0

@StevenRumbalski - 是的,這樣做,雖然我沒有發佈,因爲知道'sed',你可以可以通過文件一次性完成所有操作。而且,'/ g'可能是不必要的。我會刪除它。 – mgilson

1

這可能會爲你工作:

sed '/\x01/{s// | /g;G}' file 

或者,如果你只是想換行添加到每個行:

sed G file