如何在分隔符之间替换多行

如何在分隔符之间替换多行

给出文本示例:

.... 文本 ,..
{{{Python
字符串1 = 'abcde'
字符串2 = '12345'
打印(string1[[1:3]])
打印(string2[[:-1]])
}}}
.... 文本 ,..

[[]]出现在 之外{{{。可能在 {{{ 和 }}} 之前有空格和制表符。

我想将所有[[和代]][]之间{{{}}}

我需要将结果写回原始文件。

我该怎么做?会成功sedawk

答案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

基本上,由于 while(<>),PERL 会针对输入的每一行进行循环,并且对于每一行,如果它与三括号正则表达式匹配,它会打开和关闭是否应进行替换。所有正则表达式几乎与 sed 相同。由于其关键字性质,匹配时会转义开括号。

相关内容