除了括起来的引号之外,字符串之间还有双引号

除了括起来的引号之外,字符串之间还有双引号

我有一个要求。

我的 CSV 文件有一个字符串"Testurteil "sehr gut"",我需要加载该文件(到redis)而不删除引号,或者我想要这样:Testurteil "sehr gut",即使它有结束引号也没关系。

答案1

尝试:

perl -pi.back -le 's/"(?:[^"]|"(?=[^,]))*"|[^",]*/($r=$&)=~
  s@(^"|"$|\\.)|"@$1||"\\\""@ge;$r/ge' file.csv

它使用启发式方法来尝试识别那些不是封闭字符的双引号字符,并用反斜杠转义它们。

例如,它会改变:

 "asd","","a,b"c,d"e,f",""",,blah

到:

 "asd","","a,b\"c,d\"e,f","\"",,blah

(将原来的保留为file.csv.back

要将它们更改为单引号而不是转义它们:

perl -pi.back -le 's/"(?:[^"]|"(?=[^,]))*"|[^",]*/($r=$&)=~
  s@(^"|"$|\\.)|"@$1||"'\''"@ge;$r/ge' file.csv

答案2

也许像这样?

cat test.csv
17,"abc","Testurteil "sehr gut"","08/15"
99,"xyz","Testurteil "vernichtend"","4711"

打印出所有行的所有字段(仅用于验证):

awk -F, '{print $0}' test.csv
17,"abc","Testurteil "sehr gut"","08/15"
99,"xyz","Testurteil "vernichtend"","4711"

awk 命令行选项“-F”允许您设置与标准空白不同的字段分隔符。

仅打印出您的“特殊字段”,即所有行的字段号 3:

awk -F, '{print $3}' test.csv
"Testurteil "sehr gut""
"Testurteil "vernichtend""

也许一些评论以获得更好的可读性(或导出到键:值存储):

awk -F, '{print "Line" FNR ":field3 " $3}' test.csv 
Line1:field3 "Testurteil "sehr gut""
Line2:field3 "Testurteil "vernichtend""

使用 CSV 文件的更多字段:

awk -F, '{print "Line number " FNR ": " $3 " for product "$1}' test.csv
Line number 1: "Testurteil "sehr gut"" for product 17
Line number 2: "Testurteil "vernichtend"" for product 99

相关内容