2014-07-16 37 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"