Я ничего не знаю о типах данных Python, но не могли Вы просто поймать вывод в объекте и затем проверить, является ли это массивом, или просто представьте в виде строки. если его массив просто берет первую запись, если это - строка, берут его непосредственно.
Я подразумеваю, что это - то, как я обрабатываю связанные с составом группы запросы для пользователей в vbscript.
sed '\:// START TEXT:,\:// END TEXT:d' file
Надлежащий способ сделать это в Perl с триггерным оператором Perl
perl -ne'print unless m{^// START TEXT}..m{^// END TEXT}'
x.. y в Perl оценивает к истинному запуску с x, верно, и окончание, когда y верен. M {} является другим способом записать соответствие регулярного выражения, таким образом, мы не должны сходить с ума backslashing все Ваши наклонные черты вправо.
#!/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
Perl:
perl -ne '$t=1 if /^\/\/ START TEXT/; print if !$t; $t=0 if /^\/\/ END TEXT/' < sometextfile >anothertextfile
Простой конечный автомат:
#!/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
простофиля:
BEGIN {
s = 0
}
s == 1 && $0 ~ /^\/\/ END TEXT$/ {
s = 0
next
}
s == 1 {
next
}
/^\/\/ START TEXT$/ {
s = 1
next
}
{
print
}