텍스트 예제를 보면 다음과 같습니다.
.... 텍스트 ,.. {{{파이썬 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와 거의 동일합니다. 여는 중괄호는 키워드 특성으로 인해 일치 시 이스케이프됩니다.