用于在双引号之间查找特殊字符的正则表达式

时间:2014-07-16 06:09:22

标签: regex perl unix sed

我有一个csv文件,格式如下..

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

我需要在文件中的双引号内找到逗号..请帮助我在unix或perl中获取正则表达式。

或者避免使用双引号内的逗号..

我需要输出文件像这样

001 | “雷格,贝齐” |纽约

002 | “sam.nathan” |。夏洛特

请帮助添加输入..

2 个答案:

答案 0 :(得分:1)

Perl One-Liner

根据您的输入,您可以使用:

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

答案 1 :(得分: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"