Gegeben sei das Textbeispiel:
.... Text,.. {{{Python Zeichenfolge1 = "abcde" Zeichenfolge2 = "12345" drucken(Zeichenfolge1[[1:3]]) drucken(Zeichenfolge2[[:-1]]) }}} .... Text,..
Das [[
und ]]
erscheint auch außerhalb von {{{
. Möglicherweise stehen vor {{{ und }}} Leerzeichen und Tabulatoren.
Ich möchte alle [[
und ]]
in [
und ]
zwischen {{{
und ersetzen }}}
.
Ich muss das Ergebnis in die Originaldatei zurückschreiben.
Wie kann ich das machen? Wille sed
oder awk
Arbeit?
Antwort1
Das könnte für Sie funktionieren:
sed -i '/\s*{{{/,/\s*}}}$/s/\[\(\[[^]]*\]\)\]/\1/g' file.txt
Antwort2
Das sollte funktionieren:
awk '/{{{/,/}}}/ { gsub(/\[\[/,"[");gsub(/\]\]/,"]") } { print }'
Antwort3
Ich würde Perl mit einer untergeordneten Statusvariable verwenden. Angenommen, Sie haben das Folgende als replace.pl gespeichert:
#!/usr/bin/perl -w
my $inbraces=0;
while (<>) {
/\{\{\{/ and $inbraces=1;
$inbraces==1 && s/\[\[/[/;
$inbraces==1 && s/]]/]/;
/}}}/ and $inbraces=0;
print $_;
}
Sie möchten etwas wie Folgendes ausführen:
cat inputfile.txt | perl replace.pl > outputfile.pl
Im Grunde durchläuft PERL dies aufgrund des while(<>) für jede Eingabezeile und schaltet für jede Zeile, wenn sie mit dem drei Klammern umfassenden regulären Ausdruck übereinstimmt, ein bzw. aus, ob die Ersetzungen stattfinden sollen. Alle regulären Ausdrücke sind nahezu identisch mit sed. Öffnende Klammern werden aufgrund ihrer Schlüsselwortnatur beim Abgleichen maskiert.