区切り文字間の複数行を置換する方法

区切り文字間の複数行を置換する方法

次のテキスト例の場合:

.... 文章 、..
{{{パイソン
文字列1 = 'abcde'
文字列2 = '12345'
印刷(文字列1[[1:3]])
印刷(文字列2[[:-1]])
}}}
.... 文章 、..

および[[]]の外側にも表示されます{{{。 {{{ と }}} の前にスペースとタブがある可能性があります。

[[と をすべてと]]に置き換え[、と]の間に置きたいです。{{{}}}

結果を元のファイルに書き戻す必要があります。

どうすればこれができるでしょうか?うまくsedいくawkでしょうか?

答え1

これはあなたにとって役立つかもしれません:

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

答え2

これは動作するはずです:

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

答え3

私はマイナー状態変数で perl を使用します。以下を replace.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(<>) により入力の各行をループし、各行で 3 つの中括弧の正規表現に一致する場合、置換を行うかどうかをオンまたはオフにします。すべての正規表現は sed とほぼ同じです。開き括弧は、キーワードの性質上、一致時にエスケープされます。

関連情報