2014-07-16 72 views
-2

我有以下格式的csv文件之間的特殊字符表情..經常尋找雙引號

001,"Craig,betsy",Newyork 
002,"sam.nathan",charlotte 

我需要找到該文件在雙引號內的逗號..好心幫我在獲取在UNIX或Perl的正則表達式。

否則避免雙引號內的逗號..

我需要輸出的文件是這樣

001 |「Craig,betsy」|紐約

002 |「sam.nathan」| charlotte。

請添加輸入幫助..

+0

一旦您在引號內找到逗號,您究竟想做什麼? – hwnd

+0

你的意思是什麼?尋找什麼? 'sed -r -n'/".*,.*"/p''將會在雙引號內打印出逗號。 – WKPlus

+1

您可能想要使用[CSV解析器](https://metacpan.org/pod/Text::CSV)。 –

回答

1

Perl的一個班輪

隨着你的輸入,你可以使用這個:

perl -ne 'while(m/"[^",]+\K,(?=[^",]*")/g){print "$&\n";}' yourfile 
+0

+1在此正則表達式中適用於'\ K' – anubhava

0

這裏是一個awk將改變提交分隔符到|

awk -F, '{for (i=1;i<NF;i++) {c+=gsub(/\"/,"&",$i);printf "%s"(c%2?FS:"|"),$i}print $NF}' t 
001|"Craig,betsy"|Newyork 
002|"sam.nathan"|charlotte 

它將數據劃分爲由,分隔的組。然後它會統計它在每個字段中找到多少個"
當數可以除以2,然後用|,如果不使用,


如果你有gnu awk 4.xxx你可以使用FPAT

awk '{for (i=1;i<NF;i++) printf "%s|",$i;print $NF}' FPAT='[^,]+|"[^"]+"' t 
001|"Craig,betsy"|Newyork 
002|"sam.nathan"|charlotte 

如何做到這一點FPAT='[^,]+|"[^"]+"'工作?
它定義了一個字段的樣子,而不是什麼是分隔符。
[^,]+一個字段是一些不包含,
"[^"]+"一些開始與"然後字符不等於"並用"結束。 Eks "my,data""data"