與SED

2013-10-03 25 views
2

雙引號環繞數字我有一個簡單的要求,我必須輸入likeL與SED

4,23139,,"XYZ" 

在一個文本文件,我需要輸出像

"4","23139","","ARCMsgEnum". 

我寫的命令工作正常在某些情況下:

sed 's/[0-9]*[0-9]/"&"/g' inputTestData.txt | sed s/,,/,\"\",/g 

但有一些行輸入時間戳:

4,23139,,"XYZ","2008-09-04 08:11:33.51 AM" 

因此所需的輸出是:

"4","23139","","XYZ","2008-09-04 08:11:33.51 AM" 

,但上面的命令給我的輸出,如:

"4","23139","","XYZ",""2008"-"09"-"04" "08":"11":"33"."46" AM" 
+0

我已經問過一個similirar問題,但不知何故我無法自己得到這個。 輸入: 1234.34,一個,巴格達,+ 345.65,+,++ + 5335.643,貓,狗,, +,++,+ 644.65,A,B 希望的輸出: 1234.34,一個,巴格達,345.65, +,++ 5335.643,cat,dog ,, +,++,644.65,a,b –

回答

3

下可能爲你工作:

sed -e 's/"//g' -e 's/[^,]*/"&"/g' inputfile 

這將首先剝離引號,然後在引號內插入引號s在逗號內。

舉個例子:

$ echo 4,23139,,\"XYZ\",\"2008-09-04 08:11:33.51 AM\" | sed -e 's/"//g' -e 's/[^,]*/"&"/g' 
"4","23139","","XYZ","2008-09-04 08:11:33.51 AM" 
+1

非常好的+1,好想先脫衣服,我只是蠻橫的強迫它:/ –

+0

非常感謝您的快速回復爲我工作.. :) –

1

因爲我想不出一個聰明可靠的方法,你可以使用:

$ sed -re 's/^[^"]/"&/' 
     -e 's/[^"]$/&"/' 
     -e 's/,,/,"",/g' 
     -e 's/([^"]),/\1",/g' 
     -e 's/,([^"])/,"\1/g' file 
+1

+1。蠻力的方法可以處理各種瘋狂的輸入,比如'foo,bar「baz,foobar'。 – devnull

+0

我問過一個similirar的問題,但不知何故我無法自己得到這個 輸入: 1234.34,a,Baghdad, +345.65,+,++ + 5335.643,cat,dog ,, +,++,+ 644.65,a,b 所需輸出: 1234.34,a,Baghdad,345.65,+,++ 5335。643,cat,dog ,, +,++,644.65,a,b –

0

這應該爲你工作

sed -re 's/([0-9]+),/"\1",/g' -e 's/,,/,"",/g' inputTestData.txt 

你非常接近。只需要檢查是否有後跟,

數。例如:

$ cat inputTestData.txt 
4,23139,,"XYZ","2008-09-04 08:11:33.51 AM" 

$ sed -re 's/([0-9]+),/"\1",/g' -e 's/,,/,"",/g' inputTestData.txt 
"4","23139","","XYZ","2008-09-04 08:11:33.51 AM" 

注意

你不必管一個sed輸出到另一個sed多個正則表達式。您可以使用-e選項,然後多次使用s/../../g

+0

'([0-9] * [0-9])''可能只是'([0-9] +)'。 –

+0

@sudo_O感謝您指出。實際上我最初是用'[0-9] *'嘗試的,但是給出了一些錯誤的結果,所以剛剛附加了[0-9]'。將編輯。 – jkshah

+0

'*'爲零或更多,而'+'是一個或多個,所以'[0-9] * [0-9]'是零個或多個數字,後面跟着1個數字,只是一個或多個數字。 –