2013-04-26 43 views
3

我有以下虛假數據:GNU SED移除位數字空間中的文本文件

Dominik Dryja|4111 2386 0873 0189|0315 
Laivonen Eero|5111 0620 0750 8041|0813 
Jukka Valimaa|5111 6500 0489 0035|0415 
Rafael Diaz de Leon|4111 3036 6209 4796|0516 
Mr Jonathan Bird|4111 6150 0291 7415|0215 
ERRANTE VINCENZO|4222 6111 0038 6639|0114 
YOSHIO MOTOKI|5222 3200 0374 7129|0513 
I. A. VLACHOGIANNIS|4333 0115 6936 2003|0315 
Soumya Kanti Deb|4333 0590 0165 4877|1019 
WU KE ZHAN|5444 8213 7236 0431|0716 

我儘量只從位數剝離空間看起來像這樣:

Dominik Dryja|4111238608730189|0315 
Laivonen Eero|5111062007508041|0813 
Jukka Valimaa|5111650004890035|0415 
Rafael Diaz de Leon|4111303662094796|0516 
Mr Jonathan Bird|4111615002917415|0215 
ERRANTE VINCENZO|4222611100386639|0114 
YOSHIO MOTOKI|5222320003747129|0513 
I. A. VLACHOGIANNIS|4333011569362003|0315 
Soumya Kanti Deb|4333059001654877|1019 
WU KE ZHAN|5444821372360431|0716 

試圖sed -r '#|([0-9]{4})\ ([0-9]{4})\ ([0-9]{4})\ ([0-9]{4})|#\1\2\3\4#g' 由於某種原因沒有成功。任何想法我錯了?

謝謝!

回答

1

您可以簡化您的sed:

sed 's/\([0-9]\{4\}\) /\1/g' inFile 
1

假設總有數字之間一個空格:

sed 's/\([0-9]\) \([0-9]\)/\1\2/g' 

與您的例子。代碼很簡單 - 如果它們發生在兩位數之間,則刪除所有單個空格。

+0

是的,它的工作原理,但我的位模式爲「| DDDD DDDD DDDD DDDD |」,你的答案會刪除「DD DD」之間的空單過了,那我不想要。 – bsteo 2013-04-26 07:48:28

+0

你的例子沒有這樣的模式,所以我認爲應該刪除數字之間的任何空格。 – aragaer 2013-04-26 08:29:39

+0

怎麼樣? 「| 4111 6150 0291 7415 |」 – bsteo 2013-04-26 09:39:57