![Perl: 따옴표 사이의 쉼표를 @ 기호로 바꿉니다.](https://linux55.com/image/130813/Perl%3A%20%EB%94%B0%EC%98%B4%ED%91%9C%20%EC%82%AC%EC%9D%B4%EC%9D%98%20%EC%89%BC%ED%91%9C%EB%A5%BC%20%40%20%EA%B8%B0%ED%98%B8%EB%A1%9C%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4..png)
닫는 따옴표 중 일부가 다음 줄에 나타나는 까다로운 텍스트 블록이 있습니다. 따옴표 사이에 나타나는 모든 쉼표를 @ 기호로 바꾸고 싶습니다.
"----, ----",, ----, ----,,"",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;