2

Приведенный текстовый пример:

.... text ,..
{{{python
string1 = 'abcde'
string2 = '12345'
print(string1[[1:3]])
print(string2[[:-1]])
}}}
.... text ,..

[[ И ]] также появляются за пределами {{{ тоже. Возможно, перед {{{and}}} есть пробелы и символы табуляции.

Я хочу заменить все [[ и ]] на [ и ] между {{{ и }}} .

Мне нужно записать результат обратно в исходный файл.

Как я могу это сделать? Будет ли работать sed или awk ?

3 ответа3

3

Это может работать для вас:

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

Я хотел бы использовать 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(<>) и для каждой строки, если она соответствует регулярному выражению с тремя скобками, она включает и выключает, должны ли происходить замены. Все регулярные выражения почти идентичны sed. Открытые скобки экранируются при сопоставлении из-за их природы ключевых слов.

2

Это должно работать:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .