구분 기호 사이에 여러 줄을 대체하는 방법

구분 기호 사이에 여러 줄을 대체하는 방법

텍스트 예제를 보면 다음과 같습니다.

.... 텍스트 ,..
{{{파이썬
string1 = 'abcde'
문자열2 = '12345'
인쇄(문자열1[[1:3]])
인쇄(문자열2[[:-1]])
}}}
.... 텍스트 ,..

and [[]]외부에 나타납니다 {{{. {{{ 및 }}} 앞에 공백과 탭이 있을 수 있습니다.

[[나는 all and ]][and ]between {{{and 로 대체하고 싶습니다 }}}.

결과를 원본 파일에 다시 써야 합니다.

어떻게 해야 하나요? 일할 것인가 sed, 아니면 awk일할 것인가?

답변1

이것은 당신에게 도움이 될 수 있습니다:

sed -i '/\s*{{{/,/\s*}}}$/s/\[\(\[[^]]*\]\)\]/\1/g' file.txt

답변2

이것은 작동합니다:

awk '/{{{/,/}}}/ { gsub(/\[\[/,"[");gsub(/\]\]/,"]") } { print }'

답변3

나는 사소한 상태 변수와 함께 Perl을 사용할 것입니다. 아래 내용을 replacement.pl로 저장했다고 가정합니다.

#!/usr/bin/perl -w
my $inbraces=0;
while (<>) {
    /\{\{\{/ and $inbraces=1;
    $inbraces==1 && s/\[\[/[/;
    $inbraces==1 && s/]]/]/;
    /}}}/ and $inbraces=0;
    print $_;
}

다음과 같은 것을 실행하고 싶을 것입니다:

cat inputfile.txt | perl replace.pl > outputfile.pl

기본적으로 PERL은 while(<>) 때문에 입력의 각 줄에 대해 이를 반복하고, 각 줄에 대해 세 개의 중괄호 정규식과 일치하면 대체가 발생해야 하는지 여부를 켜고 끕니다. 모든 정규식은 sed와 거의 동일합니다. 여는 중괄호는 키워드 특성으로 인해 일치 시 이스케이프됩니다.

관련 정보