Как удалить теговый блок текста в файле?

Я ничего не знаю о типах данных Python, но не могли Вы просто поймать вывод в объекте и затем проверить, является ли это массивом, или просто представьте в виде строки. если его массив просто берет первую запись, если это - строка, берут его непосредственно.

Я подразумеваю, что это - то, как я обрабатываю связанные с составом группы запросы для пользователей в vbscript.

5
задан 2 May 2010 в 11:11
6 ответов
sed '\:// START TEXT:,\:// END TEXT:d' file
5
ответ дан 3 December 2019 в 01:12

Надлежащий способ сделать это в Perl с триггерным оператором Perl

perl -ne'print unless m{^// START TEXT}..m{^// END TEXT}'

x.. y в Perl оценивает к истинному запуску с x, верно, и окончание, когда y верен. M {} является другим способом записать соответствие регулярного выражения, таким образом, мы не должны сходить с ума backslashing все Ваши наклонные черты вправо.

2
ответ дан 3 December 2019 в 01:12
#!/usr/bin/nawk -f
BEGIN {
startblock="^/\/\ START TEXT"
endblock="^/\/\ END TEXT"
}
{
        if(! match($0,startblock)) {
                { print }
        }
        else    {
                while ( !match($0,endblock )) {
                        getline;
                }
        }

}

./removeblocks <sometextfile> anothertextfile

1
ответ дан 3 December 2019 в 01:12

Perl:

perl -ne '$t=1 if /^\/\/ START TEXT/; print if !$t; $t=0 if /^\/\/ END TEXT/' < sometextfile >anothertextfile
1
ответ дан 3 December 2019 в 01:12

Простой конечный автомат:

#!/usr/bin/perl

my $inblock = 0;
while (<>) {
    if (/^\/\/ START TEXT/) {
        $inblock=1;
    } elsif (/^\/\/ END TEXT/) {
        $inblock=0;
    } elsif ( ! $inblock) {
        print;
    }
}

Использование в качестве примера:

cat testfile | perl remove_block.pl
random
text
more
random
text

Хотя логика Florian является здравой, я верю с Вашим примером, она распечатает //END TEXT со следующим (уродливым) входом:

random
text
// START TEXT
internal
text
// END TEXT
// END TEXT
more
random
// START TEXT
asdf
// END TEXT
text 
1
ответ дан 3 December 2019 в 01:12
  • 1
    Немного более хитрый вопрос, тот же вид линию за линией указывает проблему: serverfault.com/questions/90294/… . Стоящий чтения хорошо Вы находитесь в мышлении, я думаю. –  Kyle Brandt 2 May 2010 в 21:39

простофиля:

BEGIN {
  s = 0
}

s == 1 && $0 ~ /^\/\/ END TEXT$/ {
  s = 0
  next
}

s == 1 {
  next
}

/^\/\/ START TEXT$/ {
  s = 1
  next
}

{
  print
}
0
ответ дан 3 December 2019 в 01:12

Теги

Похожие вопросы