Perl:用@符号替换引号之间的逗号

Perl:用@符号替换引号之间的逗号

我有一个棘手的文本块,其中一些结尾引号出现在下一行。我想用 @ 符号替换引号之间出现的每个逗号。

"----, ----",, ----, ----,,"",start quote," starting
 next line with end quote, ",---,, "--- ,", "begin quote ,,
,,nxt line end quote ",----, ----",, ----, "----,,"---","",
---- ,","----, ----",,"", --",--,----,,,

sed如果不是因为下一行中那个棘手的结束引用,但在使用 时遇到困难,我可以使用 来做到这一点perl

答案1

如果引号无法嵌套或转义,只需将输入拆分为引号,修改每个奇数元素,然后用引号连接回来:

#!/usr/bin/perl
use warnings;
use strict;

my $input = '"----, ----",, ----, ----,,"",start quote," starting
 next line with end quote, ",---,, "--- ,", "begin quote ,,
,,nxt line end quote ",----, ----",, ----, "----,,"---","",
---- ,","----, ----",,"", --",--,----,,,';

my @segments = split /"/, $input;  # fix SO syntax highlighting: "
s/,/@/g for @segments[ grep $_ % 2, 0 .. $#segments ];
print join '"', @segments;

相关内容