如何替換分隔符號之間的多行

如何替換分隔符號之間的多行

給出文字範例:

.... 文字 ,..
{{{Python
字串1 = 'abcde'
字串2 = '12345'
印出(字串1[[1:3]])
印出(字串2[[:-1]])
}}}
.... 文字 ,..

[[]]出現在{{{太之外。也許在 {{{ 和 }}} 之前有空格和製表符。

我想將 all [[and替換]][and]之間的{{{and }}}

我需要將結果寫回原始文件。

我怎樣才能做到這一點?會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

基本上,由於 while(<>),PERL 會針對每行輸入循環遍歷此值,並且對於每行,如果它與三括號正則表達式匹配,則會打開和關閉是否應進行替換。所有正規表示式幾乎與 sed 相同。由於其關鍵字性質,開括號在符合時會被轉義。

相關內容