次のテキスト例の場合:
.... 文章 、.. {{{パイソン 文字列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 とほぼ同じです。開き括弧は、キーワードの性質上、一致時にエスケープされます。