2011-09-16 64 views
1

數據文件看起來像的提取頭和數據:使用SED從「X = A 1,Y = B 1,Z = C1」類型的文件

x=a1, y=b1, z=c1 
x=a2, y=b2, z=c2 
... 

我想將其解析爲更可用的格式:

x y z 
a1 b1 c1 
a2 b2 c2 
... 

標題「x,y,z」和數據「a,b,c」不包含「=」或「,」。

使用

1 s/=*[^=]*[,$]/ /g 

給我

x y z=c1 

顯然,最後的項目不與 「[,$]」 任何建議是否匹配?

非常感謝!

回答

2

[,$]的匹配逗號或一美元,而不是逗號或行結束。

這可能是最簡單的的第一行做兩個操作:一切

sed -e '1{ s/=[^,]*,//g; s/=.*//; }' ... 

第一個長相之間的等號,並第一個逗號(包括分隔符),並刪除它,反覆;第二個查找最後(唯一)等號後的所有內容並刪除它。

+0

Jonathan,非常好!你也很清楚地解釋了一切,非常感謝新手。是的,我的問題是與[逗號,行尾]匹配。一個相關的問題,你將如何剝離「= a1」並保留逗號,所以結果將是一個CSV文件? – Dong

+0

在StackOverflow和相關網站上顯示感謝的標準方式是通過upvoting或接受一個或兩個答案(參見[FAQ](http://stackoverflow.com/faq#reputation))。您可以通過點擊答案旁邊的向上箭頭來加註;您可以通過點擊您的其中一個問題的答案旁邊的勾號(複選標記)來接受。請注意,當你接受別人的回答時,你會對自己的聲望有小小的提升。 –

+0

應將替換字符串(當前爲空)更改爲逗號以獲得​​類似CSV的輸出。 –

2
sed -i 's/[^=]*=\([^,]*\)/\1 /g' 

應該可以將所有的數據進入這個格式

a1 b1 c1 
a2 b2 c2 
... 

之後,如果你願意,你也可以解析你可以插入

sed -i 1i"header" 

您選擇的頭在Jonathan Leffler的回答中,使用sed的文件頭部出來了。

+0

'sed -e's/[^ =] * \([^,] * \)/ \ 1/g''給出「= a1 = b1 = c1」 – Dong

+0

謝謝,我錯過了 – Snitse

0

要將文件分別解析到CSV,

s/=[^,]*//g 

s/[^,]*=//g 

給予報頭和數據。

相關問題