닫는 따옴표 중 일부가 다음 줄에 나타나는 까다로운 텍스트 블록이 있습니다. 따옴표 사이에 나타나는 모든 쉼표를 @ 기호로 바꾸고 싶습니다.
"----, ----",, ----, ----,,"",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;